Fix welcome page support in WebFlux
Prior to this commit, the welcome page support implemented in gh-9785 would override existing index views in both annotation and functional variants. This comes from the fact that the feature was implemented as a `RouterFunction` configured in the main `RouterFunctionMapping` bean. Due to ordering issues between mappings, this would override existing application mappings in some cases. This commit ensures that the welcome page `RouterFunction` is contributed to the context in its own handler mapping, ordered after the application ones. Fixes gh-21909
This commit is contained in:
@@ -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<ServerResponse> 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<ServerResponse> routerFunction = factory.createRouterFunction();
|
||||
if (routerFunction != null) {
|
||||
RouterFunctionMapping routerFunctionMapping = new RouterFunctionMapping(routerFunction);
|
||||
routerFunctionMapping.setOrder(1);
|
||||
return routerFunctionMapping;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user