From d0128071ec89df33c361a6788f7a7213143368ee Mon Sep 17 00:00:00 2001 From: Dmytro Danilenkov Date: Thu, 10 Apr 2025 14:39:54 +0200 Subject: [PATCH 1/2] Add missing attributes to ServletRegistration annotation See gh-45007 Signed-off-by: Dmytro Danilenkov --- .../ServletContextInitializerBeans.java | 5 +++ .../boot/web/servlet/ServletRegistration.java | 15 +++++++ .../ServletContextInitializerBeansTests.java | 40 +++++++++++++++++++ 3 files changed, 60 insertions(+) diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/servlet/ServletContextInitializerBeans.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/servlet/ServletContextInitializerBeans.java index 84642aff41..195a707cd0 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/servlet/ServletContextInitializerBeans.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/servlet/ServletContextInitializerBeans.java @@ -65,6 +65,7 @@ import org.springframework.util.StringUtils; * @author Brian Clozel * @author Moritz Halbritter * @author Daeho Kwon + * @author Dmytro Danilenkov * @since 1.4.0 */ public class ServletContextInitializerBeans extends AbstractCollection { @@ -320,6 +321,10 @@ public class ServletContextInitializerBeans extends AbstractCollection { + assertThat(bean.getServletName()).isEqualTo("extended"); + assertThat(bean.getUrlMappings()).containsExactly("/extended/*"); + assertThat(bean.getInitParameters()).containsEntry("hello", "world").containsEntry("flag", "true"); + assertThat(bean.getMultipartConfig()).isNotNull(); + assertThat(bean.getMultipartConfig().getLocation()).isEqualTo("/tmp"); + assertThat(bean.getMultipartConfig().getMaxFileSize()).isEqualTo(1024); + assertThat(bean.getMultipartConfig().getMaxRequestSize()).isEqualTo(4096); + assertThat(bean.getMultipartConfig().getFileSizeThreshold()).isEqualTo(128); + }); + + } + + private void assertThatSingleServletRegistration(ServletContextInitializerBeans initializerBeans, + ThrowingConsumer> code) { + assertThatSingleRegistration(initializerBeans, ServletRegistrationBean.class, code::acceptThrows); + } + private void load(Class... configuration) { this.context = new AnnotationConfigApplicationContext(configuration); } @@ -454,4 +479,19 @@ class ServletContextInitializerBeansTests { } + @Configuration(proxyBeanMethods = false) + static class ServletConfigurationWithExtendedAttributes { + + @Bean + @ServletRegistration(name = "extended", urlMappings = "/extended/*", + initParameters = { @WebInitParam(name = "hello", value = "world"), + @WebInitParam(name = "flag", value = "true") }, + multipartConfig = @MultipartConfig(location = "/tmp", maxFileSize = 1024, maxRequestSize = 4096, + fileSizeThreshold = 128)) + TestServlet testServletWithInitParametersAndMultipart() { + return new TestServlet(); + } + + } + } From 5401327e4d95c89cba6ce44b8c2b5d0ce1d04bf0 Mon Sep 17 00:00:00 2001 From: Moritz Halbritter Date: Thu, 10 Apr 2025 14:46:48 +0200 Subject: [PATCH 2/2] Polish "Add missing attributes to ServletRegistration annotation" See gh-45007 --- .../boot/web/servlet/ServletRegistration.java | 8 +-- .../ServletContextInitializerBeansTests.java | 51 +++++-------------- 2 files changed, 16 insertions(+), 43 deletions(-) diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/servlet/ServletRegistration.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/servlet/ServletRegistration.java index e054a8b9e3..06d787a647 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/servlet/ServletRegistration.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/servlet/ServletRegistration.java @@ -91,14 +91,14 @@ public @interface ServletRegistration { int loadOnStartup() default -1; /** - * Init parameters to set on the servlet (mirrors {@code @WebInitParam} usage). - * @return array of {@link WebInitParam} + * Init parameters to be used with the servlet. + * @return the init parameters */ WebInitParam[] initParameters() default {}; /** - * Multipart configuration. - * @return multipart config {@link MultipartConfig} + * The multipart configuration. + * @return the multipart configuration */ MultipartConfig multipartConfig() default @MultipartConfig; diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/servlet/ServletContextInitializerBeansTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/servlet/ServletContextInitializerBeansTests.java index c0e5a5e87e..c1cafa0c47 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/servlet/ServletContextInitializerBeansTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/servlet/ServletContextInitializerBeansTests.java @@ -129,6 +129,13 @@ class ServletContextInitializerBeansTests { assertThat(servletRegistrationBean.getServletName()).isEqualTo("test"); assertThat(servletRegistrationBean.isAsyncSupported()).isFalse(); assertThat(servletRegistrationBean.getUrlMappings()).containsExactly("/test/*"); + assertThat(servletRegistrationBean.getInitParameters()) + .containsExactlyInAnyOrderEntriesOf(Map.of("env", "test", "debug", "true")); + assertThat(servletRegistrationBean.getMultipartConfig()).isNotNull(); + assertThat(servletRegistrationBean.getMultipartConfig().getLocation()).isEqualTo("/tmp"); + assertThat(servletRegistrationBean.getMultipartConfig().getMaxFileSize()).isEqualTo(1024); + assertThat(servletRegistrationBean.getMultipartConfig().getMaxRequestSize()).isEqualTo(4096); + assertThat(servletRegistrationBean.getMultipartConfig().getFileSizeThreshold()).isEqualTo(128); }); } @@ -209,29 +216,6 @@ class ServletContextInitializerBeansTests { .isEqualTo(ServletConfigurationWithAnnotationAndOrder.ORDER)); } - @Test - void shouldApplyExtendedServletRegistrationAnnotation() { - load(ServletConfigurationWithExtendedAttributes.class); - ServletContextInitializerBeans initializerBeans = new ServletContextInitializerBeans( - this.context.getBeanFactory(), TestServletContextInitializer.class); - assertThatSingleServletRegistration(initializerBeans, (bean) -> { - assertThat(bean.getServletName()).isEqualTo("extended"); - assertThat(bean.getUrlMappings()).containsExactly("/extended/*"); - assertThat(bean.getInitParameters()).containsEntry("hello", "world").containsEntry("flag", "true"); - assertThat(bean.getMultipartConfig()).isNotNull(); - assertThat(bean.getMultipartConfig().getLocation()).isEqualTo("/tmp"); - assertThat(bean.getMultipartConfig().getMaxFileSize()).isEqualTo(1024); - assertThat(bean.getMultipartConfig().getMaxRequestSize()).isEqualTo(4096); - assertThat(bean.getMultipartConfig().getFileSizeThreshold()).isEqualTo(128); - }); - - } - - private void assertThatSingleServletRegistration(ServletContextInitializerBeans initializerBeans, - ThrowingConsumer> code) { - assertThatSingleRegistration(initializerBeans, ServletRegistrationBean.class, code::acceptThrows); - } - private void load(Class... configuration) { this.context = new AnnotationConfigApplicationContext(configuration); } @@ -269,7 +253,11 @@ class ServletContextInitializerBeansTests { @Bean @ServletRegistration(enabled = false, name = "test", asyncSupported = false, urlMappings = "/test/*", - loadOnStartup = 1) + loadOnStartup = 1, + initParameters = { @WebInitParam(name = "env", value = "test"), + @WebInitParam(name = "debug", value = "true") }, + multipartConfig = @MultipartConfig(location = "/tmp", maxFileSize = 1024, maxRequestSize = 4096, + fileSizeThreshold = 128)) TestServlet testServlet() { return new TestServlet(); } @@ -479,19 +467,4 @@ class ServletContextInitializerBeansTests { } - @Configuration(proxyBeanMethods = false) - static class ServletConfigurationWithExtendedAttributes { - - @Bean - @ServletRegistration(name = "extended", urlMappings = "/extended/*", - initParameters = { @WebInitParam(name = "hello", value = "world"), - @WebInitParam(name = "flag", value = "true") }, - multipartConfig = @MultipartConfig(location = "/tmp", maxFileSize = 1024, maxRequestSize = 4096, - fileSizeThreshold = 128)) - TestServlet testServletWithInitParametersAndMultipart() { - return new TestServlet(); - } - - } - }