31
31
import org .springframework .context .annotation .Configuration ;
32
32
import org .springframework .core .Ordered ;
33
33
import org .springframework .core .annotation .AnnotationAwareOrderComparator ;
34
- import org .springframework .http .codec .HttpMessageReader ;
35
- import org .springframework .http .codec .HttpMessageWriter ;
36
34
import org .springframework .http .server .reactive .HttpHandler ;
37
35
import org .springframework .web .reactive .DispatcherHandler ;
38
36
import org .springframework .web .reactive .function .server .HandlerStrategies ;
@@ -72,8 +70,7 @@ public AnnotationConfig(ApplicationContext applicationContext) {
72
70
73
71
@ Bean
74
72
public HttpHandler httpHandler () {
75
- return WebHttpHandlerBuilder .applicationContext (this .applicationContext )
76
- .build ();
73
+ return WebHttpHandlerBuilder .applicationContext (this .applicationContext ).build ();
77
74
}
78
75
79
76
}
@@ -86,47 +83,38 @@ public static class FunctionalConfig {
86
83
87
84
private final WebSessionManager webSessionManager ;
88
85
89
- private final List <HttpMessageReader <?>> messageReaders ;
90
-
91
- private final List <HttpMessageWriter <?>> messageWriters ;
86
+ private HandlerStrategies .Builder handlerStrategiesBuilder ;
92
87
93
88
private final List <ViewResolver > viewResolvers ;
94
89
95
90
public FunctionalConfig (ObjectProvider <List <WebFilter >> webFilters ,
96
- ObjectProvider <WebSessionManager > webSessionManager ,
97
- ObjectProvider <List <HttpMessageReader <?>>> messageReaders ,
98
- ObjectProvider <List <HttpMessageWriter <?>>> messageWriters ,
99
- ObjectProvider <List <ViewResolver >> viewResolvers ) {
91
+ ObjectProvider <WebSessionManager > webSessionManager ,
92
+ ObjectProvider <HandlerStrategies .Builder > handlerStrategiesBuilder ,
93
+ ObjectProvider <List <ViewResolver >> viewResolvers ) {
100
94
this .webFilters = webFilters .getIfAvailable ();
101
95
if (this .webFilters != null ) {
102
96
AnnotationAwareOrderComparator .sort (this .webFilters );
103
97
}
104
98
this .webSessionManager = webSessionManager .getIfAvailable ();
105
- this .messageReaders = messageReaders .getIfAvailable ();
106
- this .messageWriters = messageWriters .getIfAvailable ();
99
+ this .handlerStrategiesBuilder = handlerStrategiesBuilder .getIfAvailable ();
107
100
this .viewResolvers = viewResolvers .getIfAvailable ();
108
101
}
109
102
110
103
@ Bean
111
- public <T extends ServerResponse > HttpHandler httpHandler (
112
- List <RouterFunction <T >> routerFunctions ) {
104
+ public <T extends ServerResponse > HttpHandler httpHandler (List <RouterFunction <T >> routerFunctions ) {
113
105
routerFunctions .sort (new AnnotationAwareOrderComparator ());
114
106
RouterFunction <T > routerFunction = routerFunctions .stream ()
115
- .reduce (RouterFunction ::and ).get ();
116
- HandlerStrategies .Builder strategiesBuilder = HandlerStrategies .builder ();
117
- if (this .messageReaders != null ) {
118
- this .messageReaders .forEach (strategiesBuilder ::customMessageReader );
119
- }
120
- if (this .messageWriters != null ) {
121
- this .messageWriters .forEach (strategiesBuilder ::customMessageWriter );
107
+ .reduce (RouterFunction ::and ).get ();
108
+ if (this .handlerStrategiesBuilder == null ) {
109
+ this .handlerStrategiesBuilder = HandlerStrategies .builder ();
122
110
}
123
111
if (this .viewResolvers != null ) {
124
- this .viewResolvers .forEach (strategiesBuilder ::viewResolver );
112
+ this .viewResolvers .forEach (this . handlerStrategiesBuilder ::viewResolver );
125
113
}
126
114
WebHandler webHandler = RouterFunctions .toHttpHandler (routerFunction ,
127
- strategiesBuilder .build ());
115
+ this . handlerStrategiesBuilder .build ());
128
116
WebHttpHandlerBuilder builder = WebHttpHandlerBuilder .webHandler (webHandler )
129
- .sessionManager (this .webSessionManager );
117
+ .sessionManager (this .webSessionManager );
130
118
builder .filters (this .webFilters );
131
119
return builder .build ();
132
120
}
0 commit comments