diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/Response.java b/jetty-server/src/main/java/org/eclipse/jetty/server/Response.java index 5a3ed15e570c..e023a1f1c78a 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/Response.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/Response.java @@ -1017,11 +1017,9 @@ public void setContentType(String contentType) _contentType = contentType; _mimeType = MimeTypes.CACHE.get(contentType); - String charset; - if (_mimeType != null && _mimeType.getCharset() != null && !_mimeType.isCharsetAssumed()) + String charset = MimeTypes.getCharsetFromContentType(contentType); + if (charset == null && _mimeType != null && _mimeType.isCharsetAssumed()) charset = _mimeType.getCharsetString(); - else - charset = MimeTypes.getCharsetFromContentType(contentType); if (charset == null) { @@ -1056,10 +1054,10 @@ public void setContentType(String contentType) else if (isWriting() && !charset.equalsIgnoreCase(_characterEncoding)) { // too late to change the character encoding; - _mimeType = null; _contentType = MimeTypes.getContentTypeWithoutCharset(_contentType); - if (_characterEncoding != null) + if (_characterEncoding != null && (_mimeType == null || !_mimeType.isCharsetAssumed())) _contentType = _contentType + ";charset=" + _characterEncoding; + _mimeType = MimeTypes.CACHE.get(_contentType); } else { diff --git a/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/ResponseHeadersTest.java b/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/ResponseHeadersTest.java index 4e7275961c18..81145690ef2a 100644 --- a/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/ResponseHeadersTest.java +++ b/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/ResponseHeadersTest.java @@ -258,7 +258,7 @@ public void testCharsetChangeToJsonMimeTypeSetCharsetToNull() throws Exception { HttpTester.Request request = new HttpTester.Request(); request.setMethod("GET"); - request.setURI("/charset/json-reset-null/"); + request.setURI("/charset/json-change-null/"); request.setVersion(HttpVersion.HTTP_1_1); request.setHeader("Connection", "close"); request.setHeader("Host", "test");