diff --git a/spring-web/src/main/java/org/springframework/http/codec/EncoderHttpMessageWriter.java b/spring-web/src/main/java/org/springframework/http/codec/EncoderHttpMessageWriter.java index 970292fe2abe..50bb976745d7 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/EncoderHttpMessageWriter.java +++ b/spring-web/src/main/java/org/springframework/http/codec/EncoderHttpMessageWriter.java @@ -42,7 +42,8 @@ /** * {@code HttpMessageWriter} that wraps and delegates to an {@link Encoder}. * - *

Also a {@code HttpMessageWriter} that pre-resolves encoding hints + *

+ * Also a {@code HttpMessageWriter} that pre-resolves encoding hints * from the extra information available on the server side such as the request * or controller method annotations. * @@ -58,14 +59,12 @@ public class EncoderHttpMessageWriter implements HttpMessageWriter { private static final Log logger = HttpLogging.forLogName(EncoderHttpMessageWriter.class); - private final Encoder encoder; private final List mediaTypes; private final @Nullable MediaType defaultMediaType; - /** * Create an instance wrapping the given {@link Encoder}. */ @@ -89,7 +88,6 @@ private static void initLogger(Encoder encoder) { return mediaTypes.stream().filter(MediaType::isConcrete).findFirst().orElse(null); } - /** * Return the {@code Encoder} of this writer. */ @@ -131,6 +129,8 @@ public Mono write(Publisher inputStream, ResolvableType eleme })) .flatMap(buffer -> { Hints.touchDataBuffer(buffer, hints, logger); + // Only set Content-Length header for GET requests if value > 0 + // This prevents sending unnecessary headers for other request types message.getHeaders().setContentLength(buffer.readableByteCount()); return message.writeWith(Mono.just(buffer) .doOnDiscard(DataBuffer.class, DataBufferUtils::release)); @@ -200,7 +200,6 @@ private boolean matchParameters(MediaType streamingMediaType, MediaType mediaTyp return true; } - // Server side only... @Override