Skip to content

Commit b5c89c9

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-34466
1 parent 01ae0a7 commit b5c89c9

File tree

3 files changed

+24
-2
lines changed

3 files changed

+24
-2
lines changed

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

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

672672
@Override
673673
public void setHeader(String name, @Nullable String value) {
674-
setHeaderValue(name, value);
674+
if (value == null) {
675+
this.headers.remove(name);
676+
}
677+
else {
678+
setHeaderValue(name, value);
679+
}
675680
}
676681

677682
@Override

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

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

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

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

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

672672
@Override
673673
public void setHeader(String name, @Nullable String value) {
674-
setHeaderValue(name, value);
674+
if (value == null) {
675+
this.headers.remove(name);
676+
}
677+
else {
678+
setHeaderValue(name, value);
679+
}
675680
}
676681

677682
@Override

0 commit comments

Comments
 (0)