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:
@@ -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();
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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()));
|
||||
|
||||
@@ -137,7 +137,7 @@ public class RenderingResponseIntegrationTests extends AbstractRouterFunctionInt
|
||||
|
||||
@Override
|
||||
public List<MediaType> getSupportedMediaTypes() {
|
||||
return Collections.emptyList();
|
||||
return Collections.singletonList(MediaType.TEXT_PLAIN);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user