Rename beforeRead/Write() to resolveRead/WriteHints()
This commit also removes the ServerHttpResponse parameter, not needed here since it is possible to override the write() method. Issue: SPR-14557
This commit is contained in:
@@ -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<T> implements ServerHttpMe
|
||||
ServerHttpRequest request, ServerHttpResponse response, Map<String, Object> hints) {
|
||||
|
||||
Map<String, Object> mergedHints = new HashMap<>(hints);
|
||||
mergedHints.putAll(beforeRead(streamType, elementType, request, response));
|
||||
mergedHints.putAll(resolveReadHints(streamType, elementType, request));
|
||||
|
||||
return (this.reader instanceof ServerHttpMessageReader ?
|
||||
((ServerHttpMessageReader<T>)this.reader).read(streamType, elementType, request, response, mergedHints) :
|
||||
@@ -84,7 +84,7 @@ public abstract class AbstractServerHttpMessageReader<T> implements ServerHttpMe
|
||||
ServerHttpRequest request, ServerHttpResponse response, Map<String, Object> hints) {
|
||||
|
||||
Map<String, Object> mergedHints = new HashMap<>(hints);
|
||||
mergedHints.putAll(beforeRead(streamType, elementType, request, response));
|
||||
mergedHints.putAll(resolveReadHints(streamType, elementType, request));
|
||||
|
||||
return (this.reader instanceof ServerHttpMessageReader ?
|
||||
((ServerHttpMessageReader<T>)this.reader).readMono(streamType, elementType, request, response, mergedHints) :
|
||||
@@ -92,17 +92,16 @@ public abstract class AbstractServerHttpMessageReader<T> 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<String, Object> beforeRead(ResolvableType streamType,
|
||||
ResolvableType elementType, ServerHttpRequest request, ServerHttpResponse response);
|
||||
protected abstract Map<String, Object> resolveReadHints(ResolvableType streamType,
|
||||
ResolvableType elementType, ServerHttpRequest request);
|
||||
|
||||
}
|
||||
|
||||
@@ -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<T> implements ServerHttpMe
|
||||
MediaType mediaType, ServerHttpRequest request, ServerHttpResponse response, Map<String, Object> hints) {
|
||||
|
||||
Map<String, Object> 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<T>)this.writer).write(inputStream, streamType,
|
||||
elementType, mediaType, request, response, mergedHints) :
|
||||
@@ -76,7 +76,7 @@ public abstract class AbstractServerHttpMessageWriter<T> 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<T> 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<String, Object> beforeWrite(ResolvableType streamType, ResolvableType elementType,
|
||||
MediaType mediaType, ServerHttpRequest request, ServerHttpResponse response);
|
||||
protected abstract Map<String, Object> resolveWriteHints(ResolvableType streamType, ResolvableType elementType,
|
||||
MediaType mediaType, ServerHttpRequest request);
|
||||
|
||||
}
|
||||
|
||||
@@ -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<String, Object> beforeRead(ResolvableType streamType,
|
||||
ResolvableType elementType, ServerHttpRequest request, ServerHttpResponse response) {
|
||||
protected Map<String, Object> resolveReadHints(ResolvableType streamType,
|
||||
ResolvableType elementType, ServerHttpRequest request) {
|
||||
|
||||
Object source = streamType.getSource();
|
||||
MethodParameter parameter = (source instanceof MethodParameter ? (MethodParameter)source : null);
|
||||
|
||||
@@ -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<String, Object> beforeWrite(ResolvableType streamType, ResolvableType elementType,
|
||||
MediaType mediaType, ServerHttpRequest request, ServerHttpResponse response) {
|
||||
protected Map<String, Object> resolveWriteHints(ResolvableType streamType,
|
||||
ResolvableType elementType, MediaType mediaType, ServerHttpRequest request) {
|
||||
|
||||
Map<String, Object> hints = new HashMap<>();
|
||||
Object source = streamType.getSource();
|
||||
|
||||
@@ -75,12 +75,11 @@ public class ResourceHttpMessageWriter extends AbstractServerHttpMessageWriter<R
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Map<String, Object> beforeWrite(ResolvableType streamType, ResolvableType elementType,
|
||||
MediaType mediaType, ServerHttpRequest request, ServerHttpResponse response) {
|
||||
protected Map<String, Object> resolveWriteHints(ResolvableType streamType, ResolvableType elementType,
|
||||
MediaType mediaType, ServerHttpRequest request) {
|
||||
try {
|
||||
List<HttpRange> 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<R
|
||||
ServerHttpResponse response, Map<String, Object> hints) {
|
||||
|
||||
Map<String, Object> 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<HttpRange> httpRanges = (List<HttpRange>) mergedHints.get(HTTP_RANGE_REQUEST_HINT);
|
||||
if (httpRanges.size() > 1) {
|
||||
final String boundary = MimeTypeUtils.generateMultipartBoundaryString();
|
||||
|
||||
Reference in New Issue
Block a user