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 95f6092ebc54..f043c090030c 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 boolean isCommitted() { 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 1dd6f117aca9..0cf57f378690 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 @@ -458,4 +458,27 @@ private void assertPrimarySessionCookie(String expectedValue) { 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 94fbd0875fc8..e0cbd6202213 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 boolean isCommitted() { public void reset() { resetBuffer(); this.characterEncoding = null; + this.charset = false; this.contentLength = 0; this.contentType = null; this.locale = Locale.getDefault();