diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/reactive/WebFluxAutoConfiguration.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/reactive/WebFluxAutoConfiguration.java index 5ba57740a7d..ffda8ec1c66 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/reactive/WebFluxAutoConfiguration.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/reactive/WebFluxAutoConfiguration.java @@ -63,6 +63,7 @@ import org.springframework.web.reactive.config.WebFluxConfigurationSupport; import org.springframework.web.reactive.config.WebFluxConfigurer; import org.springframework.web.reactive.function.server.RouterFunction; import org.springframework.web.reactive.function.server.ServerResponse; +import org.springframework.web.reactive.function.server.support.RouterFunctionMapping; import org.springframework.web.reactive.result.method.HandlerMethodArgumentResolver; import org.springframework.web.reactive.result.method.annotation.ArgumentResolverConfigurer; import org.springframework.web.reactive.result.method.annotation.RequestMappingHandlerAdapter; @@ -101,12 +102,18 @@ public class WebFluxAutoConfiguration { public static class WelcomePageConfiguration { @Bean - public RouterFunction welcomePageRouterFunction(ApplicationContext applicationContext, + public RouterFunctionMapping welcomePageRouterFunctionMapping(ApplicationContext applicationContext, WebFluxProperties webFluxProperties, ResourceProperties resourceProperties) { WelcomePageRouterFunctionFactory factory = new WelcomePageRouterFunctionFactory( new TemplateAvailabilityProviders(applicationContext), applicationContext, resourceProperties.getStaticLocations(), webFluxProperties.getStaticPathPattern()); - return factory.createRouterFunction(); + RouterFunction routerFunction = factory.createRouterFunction(); + if (routerFunction != null) { + RouterFunctionMapping routerFunctionMapping = new RouterFunctionMapping(routerFunction); + routerFunctionMapping.setOrder(1); + return routerFunctionMapping; + } + return null; } } diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/reactive/WebFluxAutoConfigurationTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/reactive/WebFluxAutoConfigurationTests.java index f7b219c9608..8324eb8f3aa 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/reactive/WebFluxAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/reactive/WebFluxAutoConfigurationTests.java @@ -62,6 +62,7 @@ import org.springframework.web.reactive.HandlerMapping; import org.springframework.web.reactive.accept.RequestedContentTypeResolver; import org.springframework.web.reactive.config.WebFluxConfigurationSupport; import org.springframework.web.reactive.config.WebFluxConfigurer; +import org.springframework.web.reactive.function.server.support.RouterFunctionMapping; import org.springframework.web.reactive.handler.SimpleUrlHandlerMapping; import org.springframework.web.reactive.resource.CachingResourceResolver; import org.springframework.web.reactive.resource.CachingResourceTransformer; @@ -108,6 +109,7 @@ class WebFluxAutoConfigurationTests { assertThat(context).getBeans(RequestMappingHandlerMapping.class).hasSize(1); assertThat(context).getBeans(RequestMappingHandlerAdapter.class).hasSize(1); assertThat(context).getBeans(RequestedContentTypeResolver.class).hasSize(1); + assertThat(context).getBeans(RouterFunctionMapping.class).hasSize(1); assertThat(context.getBean("resourceHandlerMapping", HandlerMapping.class)).isNotNull(); }); } @@ -440,6 +442,15 @@ class WebFluxAutoConfigurationTests { }); } + @Test + void welcomePageHandlerMapping() { + this.contextRunner.withPropertyValues("spring.resources.static-locations=classpath:/welcome-page/").run((context) -> { + assertThat(context).getBeans(RouterFunctionMapping.class).hasSize(2); + assertThat(context.getBean("welcomePageRouterFunctionMapping", HandlerMapping.class)).isNotNull() + .extracting("order").isEqualTo(1); + }); + } + private Map getHandlerMap(ApplicationContext context) { HandlerMapping mapping = context.getBean("resourceHandlerMapping", HandlerMapping.class); if (mapping instanceof SimpleUrlHandlerMapping) {