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.
This commit is contained in:
Arjen Poutsma
2017-03-22 12:52:02 +01:00
parent 24f7f26fe6
commit 722e23066c
4 changed files with 8 additions and 7 deletions

View File

@@ -204,7 +204,7 @@ class DefaultEntityResponseBuilder<T> implements EntityResponse.Builder<T> {
public Mono<Void> 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<Stream<HttpMessageWriter<?>>> messageWriters() {
return strategies.messageWriters();

View File

@@ -166,11 +166,11 @@ class DefaultRenderingResponseBuilder implements RenderingResponse.Builder {
Stream<ViewResolver> 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) {

View File

@@ -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()));

View File

@@ -137,7 +137,7 @@ public class RenderingResponseIntegrationTests extends AbstractRouterFunctionInt
@Override
public List<MediaType> getSupportedMediaTypes() {
return Collections.emptyList();
return Collections.singletonList(MediaType.TEXT_PLAIN);
}
@Override