diff --git a/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletResponse.java b/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletResponse.java index 914ce0d5743..e51a8b0ad24 100644 --- a/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletResponse.java +++ b/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletResponse.java @@ -331,6 +331,7 @@ public class MockHttpServletResponse implements HttpServletResponse { public void reset() { resetBuffer(); this.characterEncoding = null; + this.charset = false; this.contentLength = 0; this.contentType = null; this.locale = Locale.getDefault(); diff --git a/spring-test/src/test/java/org/springframework/mock/web/MockHttpServletResponseTests.java b/spring-test/src/test/java/org/springframework/mock/web/MockHttpServletResponseTests.java index 2045ecb28a5..37887d88c0f 100644 --- a/spring-test/src/test/java/org/springframework/mock/web/MockHttpServletResponseTests.java +++ b/spring-test/src/test/java/org/springframework/mock/web/MockHttpServletResponseTests.java @@ -481,4 +481,27 @@ class MockHttpServletResponseTests { assertThat(((MockCookie) cookie).getSameSite()).isEqualTo("Lax"); } + @Test // gh-25501 + void resetResetsCharset() { + assertThat(response.isCharset()).isFalse(); + response.setCharacterEncoding("UTF-8"); + assertThat(response.isCharset()).isTrue(); + assertThat(response.getCharacterEncoding()).isEqualTo("UTF-8"); + response.setContentType("text/plain"); + assertThat(response.getContentType()).isEqualTo("text/plain"); + String contentTypeHeader = response.getHeader(CONTENT_TYPE); + assertThat(contentTypeHeader).isEqualTo("text/plain;charset=UTF-8"); + + response.reset(); + + assertThat(response.isCharset()).isFalse(); + // Do not invoke setCharacterEncoding() since that sets the charset flag to true. + // response.setCharacterEncoding("UTF-8"); + response.setContentType("text/plain"); + assertThat(response.isCharset()).isFalse(); // should still be false + assertThat(response.getContentType()).isEqualTo("text/plain"); + contentTypeHeader = response.getHeader(CONTENT_TYPE); + assertThat(contentTypeHeader).isEqualTo("text/plain"); + } + } diff --git a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockHttpServletResponse.java b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockHttpServletResponse.java index d9fe018ebe7..94358fd786f 100644 --- a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockHttpServletResponse.java +++ b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockHttpServletResponse.java @@ -331,6 +331,7 @@ public class MockHttpServletResponse implements HttpServletResponse { public void reset() { resetBuffer(); this.characterEncoding = null; + this.charset = false; this.contentLength = 0; this.contentType = null; this.locale = Locale.getDefault();