diff --git a/spring-web/src/main/java/org/springframework/http/support/Netty4HeadersAdapter.java b/spring-web/src/main/java/org/springframework/http/support/Netty4HeadersAdapter.java index e5108737294..d5fdc23722b 100644 --- a/spring-web/src/main/java/org/springframework/http/support/Netty4HeadersAdapter.java +++ b/spring-web/src/main/java/org/springframework/http/support/Netty4HeadersAdapter.java @@ -140,7 +140,7 @@ public final class Netty4HeadersAdapter implements MultiValueMap @Override public @Nullable List remove(Object key) { - if (key instanceof String headerName) { + if (key instanceof String headerName && this.headers.contains(headerName)) { List previousValues = this.headers.getAll(headerName); this.headers.remove(headerName); return previousValues; diff --git a/spring-web/src/test/java/org/springframework/http/server/reactive/HeadersAdaptersTests.java b/spring-web/src/test/java/org/springframework/http/server/reactive/HeadersAdaptersTests.java index d90e68d4b01..4f50168d028 100644 --- a/spring-web/src/test/java/org/springframework/http/server/reactive/HeadersAdaptersTests.java +++ b/spring-web/src/test/java/org/springframework/http/server/reactive/HeadersAdaptersTests.java @@ -82,6 +82,19 @@ class HeadersAdaptersTests { .hasSize(0); } + @ParameterizedHeadersTest + void shouldReturnNullWhenRemoveUnknown(MultiValueMap headers) { + assertThat(headers.remove("unknown")).isEqualTo(null); + } + + @ParameterizedHeadersTest + void shouldReturnPreviousValuesWhenRemove(MultiValueMap headers) { + headers.add("TestHeader", "first"); + headers.add("TestHEADER", "second"); + + assertThat(headers.remove("testheader")).hasSize(2); + } + @ParameterizedPopulatedHeadersTest void toString(MultiValueMap headers) { String expectedFirstHeader = "TestHeader:\"first\", \"second\", \"third\"";