diff --git a/spring-web/src/main/java/org/springframework/http/codec/AbstractServerHttpMessageReader.java b/spring-web/src/main/java/org/springframework/http/codec/AbstractServerHttpMessageReader.java index b65625a9e5f..36cfb37732a 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/AbstractServerHttpMessageReader.java +++ b/spring-web/src/main/java/org/springframework/http/codec/AbstractServerHttpMessageReader.java @@ -33,7 +33,7 @@ import org.springframework.http.server.reactive.ServerHttpResponse; /** * {@link HttpMessageReader} wrapper that implements {@link ServerHttpMessageReader} in order * to allow providing hints to the nested {@code reader} or setting the response status for - * example, by implementing {@link #beforeRead(ResolvableType, ResolvableType, ServerHttpRequest, ServerHttpResponse)}. + * example, by implementing {@link #resolveReadHints(ResolvableType, ResolvableType, ServerHttpRequest)}. * * @author Sebastien Deleuze * @since 5.0 @@ -72,7 +72,7 @@ public abstract class AbstractServerHttpMessageReader implements ServerHttpMe ServerHttpRequest request, ServerHttpResponse response, Map hints) { Map mergedHints = new HashMap<>(hints); - mergedHints.putAll(beforeRead(streamType, elementType, request, response)); + mergedHints.putAll(resolveReadHints(streamType, elementType, request)); return (this.reader instanceof ServerHttpMessageReader ? ((ServerHttpMessageReader)this.reader).read(streamType, elementType, request, response, mergedHints) : @@ -84,7 +84,7 @@ public abstract class AbstractServerHttpMessageReader implements ServerHttpMe ServerHttpRequest request, ServerHttpResponse response, Map hints) { Map mergedHints = new HashMap<>(hints); - mergedHints.putAll(beforeRead(streamType, elementType, request, response)); + mergedHints.putAll(resolveReadHints(streamType, elementType, request)); return (this.reader instanceof ServerHttpMessageReader ? ((ServerHttpMessageReader)this.reader).readMono(streamType, elementType, request, response, mergedHints) : @@ -92,17 +92,16 @@ public abstract class AbstractServerHttpMessageReader implements ServerHttpMe } /** - * Invoked before reading the request by + * Invoked before reading the request to resolve hints by * {@link #read(ResolvableType, ResolvableType, ServerHttpRequest, ServerHttpResponse, Map)}. * * @param streamType the original type used for the method return value. For annotation * based controllers, the {@link MethodParameter} is available via {@link ResolvableType#getSource()}. * @param elementType the stream element type to process * @param request the current HTTP request - * @param response the current HTTP response * @return Additional information about how to write the body */ - protected abstract Map beforeRead(ResolvableType streamType, - ResolvableType elementType, ServerHttpRequest request, ServerHttpResponse response); + protected abstract Map resolveReadHints(ResolvableType streamType, + ResolvableType elementType, ServerHttpRequest request); } diff --git a/spring-web/src/main/java/org/springframework/http/codec/AbstractServerHttpMessageWriter.java b/spring-web/src/main/java/org/springframework/http/codec/AbstractServerHttpMessageWriter.java index 50cfbfb26a8..48a5015366c 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/AbstractServerHttpMessageWriter.java +++ b/spring-web/src/main/java/org/springframework/http/codec/AbstractServerHttpMessageWriter.java @@ -33,7 +33,7 @@ import org.springframework.http.server.reactive.ServerHttpResponse; /** * {@link HttpMessageWriter} wrapper that implements {@link ServerHttpMessageWriter} in order * to allow providing hints to the nested {@code writer} or setting the response status for - * example, by implementing {@link #beforeWrite(ResolvableType, ResolvableType, MediaType, ServerHttpRequest, ServerHttpResponse)}. + * example, by implementing {@link #resolveWriteHints(ResolvableType, ResolvableType, MediaType, ServerHttpRequest)}. * * @author Sebastien Deleuze * @since 5.0 @@ -68,7 +68,7 @@ public abstract class AbstractServerHttpMessageWriter implements ServerHttpMe MediaType mediaType, ServerHttpRequest request, ServerHttpResponse response, Map hints) { Map mergedHints = new HashMap<>(hints); - mergedHints.putAll(beforeWrite(streamType, elementType, mediaType, request, response)); + mergedHints.putAll(resolveWriteHints(streamType, elementType, mediaType, request)); return (this.writer instanceof ServerHttpMessageWriter ? ((ServerHttpMessageWriter)this.writer).write(inputStream, streamType, elementType, mediaType, request, response, mergedHints) : @@ -76,7 +76,7 @@ public abstract class AbstractServerHttpMessageWriter implements ServerHttpMe } /** - * Invoked before writing the response by + * Invoked before writing the response to resolve hints by * {@link #write(Publisher, ResolvableType, ResolvableType, MediaType, ServerHttpRequest, ServerHttpResponse, Map)}. * * @param streamType the original type used for the method return value. For annotation @@ -85,10 +85,9 @@ public abstract class AbstractServerHttpMessageWriter implements ServerHttpMe * @param mediaType the content type to use when writing. May be {@code null} to * indicate that the default content type of the converter must be used. * @param request the current HTTP request - * @param response the current HTTP response * @return Additional information about how to write the body */ - protected abstract Map beforeWrite(ResolvableType streamType, ResolvableType elementType, - MediaType mediaType, ServerHttpRequest request, ServerHttpResponse response); + protected abstract Map resolveWriteHints(ResolvableType streamType, ResolvableType elementType, + MediaType mediaType, ServerHttpRequest request); } diff --git a/spring-web/src/main/java/org/springframework/http/codec/Jackson2ServerHttpMessageReader.java b/spring-web/src/main/java/org/springframework/http/codec/Jackson2ServerHttpMessageReader.java index 972a2167dfb..eefad0e5574 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/Jackson2ServerHttpMessageReader.java +++ b/spring-web/src/main/java/org/springframework/http/codec/Jackson2ServerHttpMessageReader.java @@ -25,7 +25,6 @@ import org.springframework.core.MethodParameter; import org.springframework.core.ResolvableType; import org.springframework.http.codec.json.AbstractJackson2Codec; import org.springframework.http.server.reactive.ServerHttpRequest; -import org.springframework.http.server.reactive.ServerHttpResponse; /** * {@link ServerHttpMessageReader} that resolves those annotation or request based Jackson 2 hints: @@ -44,8 +43,8 @@ public class Jackson2ServerHttpMessageReader extends AbstractServerHttpMessageRe } @Override - protected Map beforeRead(ResolvableType streamType, - ResolvableType elementType, ServerHttpRequest request, ServerHttpResponse response) { + protected Map resolveReadHints(ResolvableType streamType, + ResolvableType elementType, ServerHttpRequest request) { Object source = streamType.getSource(); MethodParameter parameter = (source instanceof MethodParameter ? (MethodParameter)source : null); diff --git a/spring-web/src/main/java/org/springframework/http/codec/Jackson2ServerHttpMessageWriter.java b/spring-web/src/main/java/org/springframework/http/codec/Jackson2ServerHttpMessageWriter.java index 2d8833d0e1a..62ef7dc694a 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/Jackson2ServerHttpMessageWriter.java +++ b/spring-web/src/main/java/org/springframework/http/codec/Jackson2ServerHttpMessageWriter.java @@ -27,7 +27,6 @@ import org.springframework.core.ResolvableType; import org.springframework.http.MediaType; import org.springframework.http.codec.json.AbstractJackson2Codec; import org.springframework.http.server.reactive.ServerHttpRequest; -import org.springframework.http.server.reactive.ServerHttpResponse; /** * {@link ServerHttpMessageWriter} that resolves those annotation or request based Jackson 2 hints: @@ -46,8 +45,8 @@ public class Jackson2ServerHttpMessageWriter extends AbstractServerHttpMessageWr } @Override - protected Map beforeWrite(ResolvableType streamType, ResolvableType elementType, - MediaType mediaType, ServerHttpRequest request, ServerHttpResponse response) { + protected Map resolveWriteHints(ResolvableType streamType, + ResolvableType elementType, MediaType mediaType, ServerHttpRequest request) { Map hints = new HashMap<>(); Object source = streamType.getSource(); diff --git a/spring-web/src/main/java/org/springframework/http/codec/ResourceHttpMessageWriter.java b/spring-web/src/main/java/org/springframework/http/codec/ResourceHttpMessageWriter.java index 343ff25d584..cd44721d4ba 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/ResourceHttpMessageWriter.java +++ b/spring-web/src/main/java/org/springframework/http/codec/ResourceHttpMessageWriter.java @@ -75,12 +75,11 @@ public class ResourceHttpMessageWriter extends AbstractServerHttpMessageWriter beforeWrite(ResolvableType streamType, ResolvableType elementType, - MediaType mediaType, ServerHttpRequest request, ServerHttpResponse response) { + protected Map resolveWriteHints(ResolvableType streamType, ResolvableType elementType, + MediaType mediaType, ServerHttpRequest request) { try { List httpRanges = request.getHeaders().getRange(); if (!httpRanges.isEmpty()) { - response.setStatusCode(HttpStatus.PARTIAL_CONTENT); return Collections.singletonMap(ResourceHttpMessageWriter.HTTP_RANGE_REQUEST_HINT, httpRanges); } } @@ -111,8 +110,9 @@ public class ResourceHttpMessageWriter extends AbstractServerHttpMessageWriter hints) { Map mergedHints = new HashMap<>(hints); - mergedHints.putAll(beforeWrite(streamType, elementType, mediaType, request, response)); + mergedHints.putAll(resolveWriteHints(streamType, elementType, mediaType, request)); if (mergedHints.containsKey(HTTP_RANGE_REQUEST_HINT)) { + response.setStatusCode(HttpStatus.PARTIAL_CONTENT); List httpRanges = (List) mergedHints.get(HTTP_RANGE_REQUEST_HINT); if (httpRanges.size() > 1) { final String boundary = MimeTypeUtils.generateMultipartBoundaryString();