Skip to content

Commit 23360d1

Browse files
committed
Change codec auto-configuration in HandlerStrategies
Since SPR-15415 and SPR-15435, the HandlerStrategies and its companion builder are now using the new CodecConfigurer infrastructure to configure codecs in a cross-cutting way. This commit looks for a custom instance of `HandlerStrategies.Builder` provided by the user, or create a default one if none was found. Fixes gh-8897
1 parent 5033110 commit 23360d1

File tree

1 file changed

+13
-25
lines changed

1 file changed

+13
-25
lines changed

Diff for: spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/reactive/HttpHandlerAutoConfiguration.java

+13-25
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,6 @@
3131
import org.springframework.context.annotation.Configuration;
3232
import org.springframework.core.Ordered;
3333
import org.springframework.core.annotation.AnnotationAwareOrderComparator;
34-
import org.springframework.http.codec.HttpMessageReader;
35-
import org.springframework.http.codec.HttpMessageWriter;
3634
import org.springframework.http.server.reactive.HttpHandler;
3735
import org.springframework.web.reactive.DispatcherHandler;
3836
import org.springframework.web.reactive.function.server.HandlerStrategies;
@@ -72,8 +70,7 @@ public AnnotationConfig(ApplicationContext applicationContext) {
7270

7371
@Bean
7472
public HttpHandler httpHandler() {
75-
return WebHttpHandlerBuilder.applicationContext(this.applicationContext)
76-
.build();
73+
return WebHttpHandlerBuilder.applicationContext(this.applicationContext).build();
7774
}
7875

7976
}
@@ -86,47 +83,38 @@ public static class FunctionalConfig {
8683

8784
private final WebSessionManager webSessionManager;
8885

89-
private final List<HttpMessageReader<?>> messageReaders;
90-
91-
private final List<HttpMessageWriter<?>> messageWriters;
86+
private HandlerStrategies.Builder handlerStrategiesBuilder;
9287

9388
private final List<ViewResolver> viewResolvers;
9489

9590
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) {
10094
this.webFilters = webFilters.getIfAvailable();
10195
if (this.webFilters != null) {
10296
AnnotationAwareOrderComparator.sort(this.webFilters);
10397
}
10498
this.webSessionManager = webSessionManager.getIfAvailable();
105-
this.messageReaders = messageReaders.getIfAvailable();
106-
this.messageWriters = messageWriters.getIfAvailable();
99+
this.handlerStrategiesBuilder = handlerStrategiesBuilder.getIfAvailable();
107100
this.viewResolvers = viewResolvers.getIfAvailable();
108101
}
109102

110103
@Bean
111-
public <T extends ServerResponse> HttpHandler httpHandler(
112-
List<RouterFunction<T>> routerFunctions) {
104+
public <T extends ServerResponse> HttpHandler httpHandler(List<RouterFunction<T>> routerFunctions) {
113105
routerFunctions.sort(new AnnotationAwareOrderComparator());
114106
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();
122110
}
123111
if (this.viewResolvers != null) {
124-
this.viewResolvers.forEach(strategiesBuilder::viewResolver);
112+
this.viewResolvers.forEach(this.handlerStrategiesBuilder::viewResolver);
125113
}
126114
WebHandler webHandler = RouterFunctions.toHttpHandler(routerFunction,
127-
strategiesBuilder.build());
115+
this.handlerStrategiesBuilder.build());
128116
WebHttpHandlerBuilder builder = WebHttpHandlerBuilder.webHandler(webHandler)
129-
.sessionManager(this.webSessionManager);
117+
.sessionManager(this.webSessionManager);
130118
builder.filters(this.webFilters);
131119
return builder.build();
132120
}

0 commit comments

Comments
 (0)