Browse Source

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
pull/1178/head
Sebastien Deleuze 9 years ago
parent
commit
f918a2b192
  1. 13
      spring-web/src/main/java/org/springframework/http/codec/AbstractServerHttpMessageReader.java
  2. 11
      spring-web/src/main/java/org/springframework/http/codec/AbstractServerHttpMessageWriter.java
  3. 5
      spring-web/src/main/java/org/springframework/http/codec/Jackson2ServerHttpMessageReader.java
  4. 5
      spring-web/src/main/java/org/springframework/http/codec/Jackson2ServerHttpMessageWriter.java
  5. 8
      spring-web/src/main/java/org/springframework/http/codec/ResourceHttpMessageWriter.java

13
spring-web/src/main/java/org/springframework/http/codec/AbstractServerHttpMessageReader.java

@ -33,7 +33,7 @@ import org.springframework.http.server.reactive.ServerHttpResponse; @@ -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 @@ -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 @@ -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 @@ -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);
}

11
spring-web/src/main/java/org/springframework/http/codec/AbstractServerHttpMessageWriter.java

@ -33,7 +33,7 @@ import org.springframework.http.server.reactive.ServerHttpResponse; @@ -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 @@ -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 @@ -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 @@ -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);
}

5
spring-web/src/main/java/org/springframework/http/codec/Jackson2ServerHttpMessageReader.java

@ -25,7 +25,6 @@ import org.springframework.core.MethodParameter; @@ -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 @@ -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);

5
spring-web/src/main/java/org/springframework/http/codec/Jackson2ServerHttpMessageWriter.java

@ -27,7 +27,6 @@ import org.springframework.core.ResolvableType; @@ -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 @@ -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();

8
spring-web/src/main/java/org/springframework/http/codec/ResourceHttpMessageWriter.java

@ -75,12 +75,11 @@ public class ResourceHttpMessageWriter extends AbstractServerHttpMessageWriter<R @@ -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 @@ -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();

Loading…
Cancel
Save