From 722e23066c7740e3231d25df0417115058c5445f Mon Sep 17 00:00:00 2001 From: Arjen Poutsma Date: Wed, 22 Mar 2017 12:52:02 +0100 Subject: [PATCH] Allow for subclassing ServerResponse This commit changes `ServerResponse` and subtypes to use properties instead of fields during response rendering. This allows for overriding these methods in a response subclass. --- .../function/server/DefaultEntityResponseBuilder.java | 2 +- .../function/server/DefaultRenderingResponseBuilder.java | 6 +++--- .../function/server/DefaultServerResponseBuilder.java | 5 +++-- .../function/server/RenderingResponseIntegrationTests.java | 2 +- 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/DefaultEntityResponseBuilder.java b/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/DefaultEntityResponseBuilder.java index 2187cf561f..336b93ada0 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/DefaultEntityResponseBuilder.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/DefaultEntityResponseBuilder.java @@ -204,7 +204,7 @@ class DefaultEntityResponseBuilder implements EntityResponse.Builder { public Mono writeTo(ServerWebExchange exchange, HandlerStrategies strategies) { ServerHttpResponse response = exchange.getResponse(); writeStatusAndHeaders(response); - return this.inserter.insert(response, new BodyInserter.Context() { + return inserter().insert(response, new BodyInserter.Context() { @Override public Supplier>> messageWriters() { return strategies.messageWriters(); diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/DefaultRenderingResponseBuilder.java b/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/DefaultRenderingResponseBuilder.java index ed7401ecd0..ec4c8747d5 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/DefaultRenderingResponseBuilder.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/DefaultRenderingResponseBuilder.java @@ -166,11 +166,11 @@ class DefaultRenderingResponseBuilder implements RenderingResponse.Builder { Stream viewResolverStream = strategies.viewResolvers().get(); return Flux.fromStream(viewResolverStream) - .concatMap(viewResolver -> viewResolver.resolveViewName(this.name, locale)) + .concatMap(viewResolver -> viewResolver.resolveViewName(name(), locale)) .next() .otherwiseIfEmpty(Mono.error(new IllegalArgumentException("Could not resolve view with name '" + - this.name +"'"))) - .then(view -> view.render(this.model, contentType, exchange)); + name() +"'"))) + .then(view -> view.render(model(), contentType, exchange)); } private Locale resolveLocale(ServerWebExchange exchange, HandlerStrategies strategies) { diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/DefaultServerResponseBuilder.java b/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/DefaultServerResponseBuilder.java index ce652677e6..369cd8da15 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/DefaultServerResponseBuilder.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/DefaultServerResponseBuilder.java @@ -248,8 +248,9 @@ class DefaultServerResponseBuilder implements ServerResponse.BodyBuilder { response.setStatusCode(this.statusCode); HttpHeaders responseHeaders = response.getHeaders(); - if (!this.headers.isEmpty()) { - this.headers.entrySet().stream() + HttpHeaders headers = headers(); + if (!headers.isEmpty()) { + headers.entrySet().stream() .filter(entry -> !responseHeaders.containsKey(entry.getKey())) .forEach(entry -> responseHeaders .put(entry.getKey(), entry.getValue())); diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/function/server/RenderingResponseIntegrationTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/function/server/RenderingResponseIntegrationTests.java index 69bdb7dbd3..254814c90c 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/function/server/RenderingResponseIntegrationTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/function/server/RenderingResponseIntegrationTests.java @@ -137,7 +137,7 @@ public class RenderingResponseIntegrationTests extends AbstractRouterFunctionInt @Override public List getSupportedMediaTypes() { - return Collections.emptyList(); + return Collections.singletonList(MediaType.TEXT_PLAIN); } @Override