diff --git a/spring-web/src/main/java/org/springframework/http/server/reactive/UndertowHeadersAdapter.java b/spring-web/src/main/java/org/springframework/http/server/reactive/UndertowHeadersAdapter.java index af70199da8e..43915c1fea2 100644 --- a/spring-web/src/main/java/org/springframework/http/server/reactive/UndertowHeadersAdapter.java +++ b/spring-web/src/main/java/org/springframework/http/server/reactive/UndertowHeadersAdapter.java @@ -129,7 +129,7 @@ class UndertowHeadersAdapter implements MultiValueMap { @Override @Nullable public List remove(Object key) { - if (key instanceof String headerName) { + if (key instanceof String headerName && this.headers.contains(headerName)) { Collection removed = this.headers.remove(headerName); if (removed != null) { return new ArrayList<>(removed); 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 40ec617973a..9709ea9d0f0 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 @@ -144,7 +144,7 @@ public final class Netty4HeadersAdapter implements MultiValueMap @Nullable @Override public 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 49906fa7fa4..aa7f58cf032 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 @@ -85,6 +85,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\"";