diff --git a/spring-web/src/main/java/org/springframework/http/server/reactive/JettyHttpHandlerAdapter.java b/spring-web/src/main/java/org/springframework/http/server/reactive/JettyHttpHandlerAdapter.java index bd97b1ef6f..86c9660aac 100644 --- a/spring-web/src/main/java/org/springframework/http/server/reactive/JettyHttpHandlerAdapter.java +++ b/spring-web/src/main/java/org/springframework/http/server/reactive/JettyHttpHandlerAdapter.java @@ -19,6 +19,7 @@ package org.springframework.http.server.reactive; import java.io.IOException; import java.net.URISyntaxException; import java.nio.ByteBuffer; +import java.nio.charset.Charset; import javax.servlet.AsyncContext; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; @@ -32,6 +33,7 @@ import org.eclipse.jetty.server.Response; import org.springframework.core.io.buffer.DataBuffer; import org.springframework.core.io.buffer.DataBufferFactory; import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; /** * {@link ServletHttpHandlerAdapter} extension that uses Jetty APIs for writing @@ -94,6 +96,19 @@ public class JettyHttpHandlerAdapter extends ServletHttpHandlerAdapter { @Override protected void applyHeaders() { + MediaType contentType = getHeaders().getContentType(); + HttpServletResponse response = getNativeResponse(); + if (response.getContentType() == null && contentType != null) { + response.setContentType(contentType.toString()); + } + Charset charset = (contentType != null ? contentType.getCharset() : null); + if (response.getCharacterEncoding() == null && charset != null) { + response.setCharacterEncoding(charset.name()); + } + long contentLength = getHeaders().getContentLength(); + if (contentLength != -1) { + response.setContentLengthLong(contentLength); + } } @Override diff --git a/spring-web/src/main/java/org/springframework/http/server/reactive/TomcatHttpHandlerAdapter.java b/spring-web/src/main/java/org/springframework/http/server/reactive/TomcatHttpHandlerAdapter.java index 89851e938a..9e1c9ee2a2 100644 --- a/spring-web/src/main/java/org/springframework/http/server/reactive/TomcatHttpHandlerAdapter.java +++ b/spring-web/src/main/java/org/springframework/http/server/reactive/TomcatHttpHandlerAdapter.java @@ -20,6 +20,7 @@ import java.io.IOException; import java.lang.reflect.Field; import java.net.URISyntaxException; import java.nio.ByteBuffer; +import java.nio.charset.Charset; import javax.servlet.AsyncContext; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; @@ -37,6 +38,7 @@ import org.springframework.core.io.buffer.DataBuffer; import org.springframework.core.io.buffer.DataBufferFactory; import org.springframework.core.io.buffer.DataBufferUtils; import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; import org.springframework.util.Assert; import org.springframework.util.ReflectionUtils; @@ -159,6 +161,19 @@ public class TomcatHttpHandlerAdapter extends ServletHttpHandlerAdapter { @Override protected void applyHeaders() { + HttpServletResponse response = getNativeResponse(); + MediaType contentType = getHeaders().getContentType(); + if (response.getContentType() == null && contentType != null) { + response.setContentType(contentType.toString()); + } + Charset charset = (contentType != null ? contentType.getCharset() : null); + if (response.getCharacterEncoding() == null && charset != null) { + response.setCharacterEncoding(charset.name()); + } + long contentLength = getHeaders().getContentLength(); + if (contentLength != -1) { + response.setContentLengthLong(contentLength); + } } @Override