Skip to content

Commit 6dd73ae

Browse files
committed
Handle null values in MockHttpServletResponse#setHeader
Prior to this commit, `MockHttpServletResponse#setHeader` would not remove the header entry when given a `null` value, as documented in the Servlet API. This commit ensures that this behavior is enforced. Fixes gh-34464
1 parent 4606337 commit 6dd73ae

File tree

3 files changed

+24
-2
lines changed

3 files changed

+24
-2
lines changed

spring-test/src/main/java/org/springframework/mock/web/MockHttpServletResponse.java

+6-1
Original file line numberDiff line numberDiff line change
@@ -686,7 +686,12 @@ private DateFormat newDateFormat() {
686686

687687
@Override
688688
public void setHeader(String name, @Nullable String value) {
689-
setHeaderValue(name, value);
689+
if (value == null) {
690+
this.headers.remove(name);
691+
}
692+
else {
693+
setHeaderValue(name, value);
694+
}
690695
}
691696

692697
@Override

spring-test/src/test/java/org/springframework/mock/web/MockHttpServletResponseTests.java

+12
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,18 @@ void setHeaderWithNullValue(String headerName) {
8888
assertThat(response.containsHeader(headerName)).isFalse();
8989
}
9090

91+
@ParameterizedTest
92+
@ValueSource(strings = {
93+
CONTENT_TYPE,
94+
CONTENT_LANGUAGE,
95+
"X-Test-Header"
96+
})
97+
void removeHeaderIfNullValue(String headerName) {
98+
response.addHeader(headerName, "test");
99+
response.setHeader(headerName, null);
100+
assertThat(response.containsHeader(headerName)).isFalse();
101+
}
102+
91103
@Test // gh-26493
92104
void setLocaleWithNullValue() {
93105
assertThat(response.getLocale()).isEqualTo(Locale.getDefault());

spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockHttpServletResponse.java

+6-1
Original file line numberDiff line numberDiff line change
@@ -686,7 +686,12 @@ private DateFormat newDateFormat() {
686686

687687
@Override
688688
public void setHeader(String name, @Nullable String value) {
689-
setHeaderValue(name, value);
689+
if (value == null) {
690+
this.headers.remove(name);
691+
}
692+
else {
693+
setHeaderValue(name, value);
694+
}
690695
}
691696

692697
@Override

0 commit comments

Comments
 (0)