@ -31,8 +31,6 @@ import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration ;
import org.springframework.context.annotation.Configuration ;
import org.springframework.core.Ordered ;
import org.springframework.core.Ordered ;
import org.springframework.core.annotation.AnnotationAwareOrderComparator ;
import org.springframework.core.annotation.AnnotationAwareOrderComparator ;
import org.springframework.http.codec.HttpMessageReader ;
import org.springframework.http.codec.HttpMessageWriter ;
import org.springframework.http.server.reactive.HttpHandler ;
import org.springframework.http.server.reactive.HttpHandler ;
import org.springframework.web.reactive.DispatcherHandler ;
import org.springframework.web.reactive.DispatcherHandler ;
import org.springframework.web.reactive.function.server.HandlerStrategies ;
import org.springframework.web.reactive.function.server.HandlerStrategies ;
@ -72,8 +70,7 @@ public class HttpHandlerAutoConfiguration {
@Bean
@Bean
public HttpHandler httpHandler ( ) {
public HttpHandler httpHandler ( ) {
return WebHttpHandlerBuilder . applicationContext ( this . applicationContext )
return WebHttpHandlerBuilder . applicationContext ( this . applicationContext ) . build ( ) ;
. build ( ) ;
}
}
}
}
@ -86,47 +83,38 @@ public class HttpHandlerAutoConfiguration {
private final WebSessionManager webSessionManager ;
private final WebSessionManager webSessionManager ;
private final List < HttpMessageReader < ? > > messageReaders ;
private HandlerStrategies . Builder handlerStrategiesBuilder ;
private final List < HttpMessageWriter < ? > > messageWriters ;
private final List < ViewResolver > viewResolvers ;
private final List < ViewResolver > viewResolvers ;
public FunctionalConfig ( ObjectProvider < List < WebFilter > > webFilters ,
public FunctionalConfig ( ObjectProvider < List < WebFilter > > webFilters ,
ObjectProvider < WebSessionManager > webSessionManager ,
ObjectProvider < WebSessionManager > webSessionManager ,
ObjectProvider < List < HttpMessageReader < ? > > > messageReaders ,
ObjectProvider < HandlerStrategies . Builder > handlerStrategiesBuilder ,
ObjectProvider < List < HttpMessageWriter < ? > > > messageWriters ,
ObjectProvider < List < ViewResolver > > viewResolvers ) {
ObjectProvider < List < ViewResolver > > viewResolvers ) {
this . webFilters = webFilters . getIfAvailable ( ) ;
this . webFilters = webFilters . getIfAvailable ( ) ;
if ( this . webFilters ! = null ) {
if ( this . webFilters ! = null ) {
AnnotationAwareOrderComparator . sort ( this . webFilters ) ;
AnnotationAwareOrderComparator . sort ( this . webFilters ) ;
}
}
this . webSessionManager = webSessionManager . getIfAvailable ( ) ;
this . webSessionManager = webSessionManager . getIfAvailable ( ) ;
this . messageReaders = messageReaders . getIfAvailable ( ) ;
this . handlerStrategiesBuilder = handlerStrategiesBuilder . getIfAvailable ( ) ;
this . messageWriters = messageWriters . getIfAvailable ( ) ;
this . viewResolvers = viewResolvers . getIfAvailable ( ) ;
this . viewResolvers = viewResolvers . getIfAvailable ( ) ;
}
}
@Bean
@Bean
public < T extends ServerResponse > HttpHandler httpHandler (
public < T extends ServerResponse > HttpHandler httpHandler ( List < RouterFunction < T > > routerFunctions ) {
List < RouterFunction < T > > routerFunctions ) {
routerFunctions . sort ( new AnnotationAwareOrderComparator ( ) ) ;
routerFunctions . sort ( new AnnotationAwareOrderComparator ( ) ) ;
RouterFunction < T > routerFunction = routerFunctions . stream ( )
RouterFunction < T > routerFunction = routerFunctions . stream ( )
. reduce ( RouterFunction : : and ) . get ( ) ;
. reduce ( RouterFunction : : and ) . get ( ) ;
HandlerStrategies . Builder strategiesBuilder = HandlerStrategies . builder ( ) ;
if ( this . handlerStrategiesBuilder = = null ) {
if ( this . messageReaders ! = null ) {
this . handlerStrategiesBuilder = HandlerStrategies . builder ( ) ;
this . messageReaders . forEach ( strategiesBuilder : : customMessageReader ) ;
}
if ( this . messageWriters ! = null ) {
this . messageWriters . forEach ( strategiesBuilder : : customMessageWriter ) ;
}
}
if ( this . viewResolvers ! = null ) {
if ( this . viewResolvers ! = null ) {
this . viewResolvers . forEach ( s trategiesBuilder: : viewResolver ) ;
this . viewResolvers . forEach ( this . handlerStrategiesBuilder : : viewResolver ) ;
}
}
WebHandler webHandler = RouterFunctions . toHttpHandler ( routerFunction ,
WebHandler webHandler = RouterFunctions . toHttpHandler ( routerFunction ,
s trategiesBuilder. build ( ) ) ;
this . handlerS trategiesBuilder. build ( ) ) ;
WebHttpHandlerBuilder builder = WebHttpHandlerBuilder . webHandler ( webHandler )
WebHttpHandlerBuilder builder = WebHttpHandlerBuilder . webHandler ( webHandler )
. sessionManager ( this . webSessionManager ) ;
. sessionManager ( this . webSessionManager ) ;
builder . filters ( this . webFilters ) ;
builder . filters ( this . webFilters ) ;
return builder . build ( ) ;
return builder . build ( ) ;
}
}