diff --git a/spring-web/src/main/java/org/springframework/http/server/reactive/NettyHeadersAdapter.java b/spring-web/src/main/java/org/springframework/http/server/reactive/NettyHeadersAdapter.java index e43a3db659d..bcc0ff50958 100644 --- a/spring-web/src/main/java/org/springframework/http/server/reactive/NettyHeadersAdapter.java +++ b/spring-web/src/main/java/org/springframework/http/server/reactive/NettyHeadersAdapter.java @@ -124,7 +124,7 @@ class NettyHeadersAdapter implements MultiValueMap { @Override public List put(String key, @Nullable List value) { List previousValues = this.headers.getAll(key); - this.headers.add(key, value); + this.headers.set(key, value); return previousValues; } diff --git a/spring-web/src/main/java/org/springframework/http/server/reactive/TomcatHeadersAdapter.java b/spring-web/src/main/java/org/springframework/http/server/reactive/TomcatHeadersAdapter.java index 1cde7d59289..fb9987269f9 100644 --- a/spring-web/src/main/java/org/springframework/http/server/reactive/TomcatHeadersAdapter.java +++ b/spring-web/src/main/java/org/springframework/http/server/reactive/TomcatHeadersAdapter.java @@ -138,6 +138,7 @@ class TomcatHeadersAdapter implements MultiValueMap { @Nullable public List put(String key, List value) { List previousValues = get(key); + this.headers.removeHeader(key); value.forEach(v -> this.headers.addValue(key).setString(v)); 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 d7b3055a95a..6d41efbc362 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 @@ -16,12 +16,14 @@ package org.springframework.http.server.reactive; +import java.util.Arrays; import java.util.Locale; import io.netty.handler.codec.http.DefaultHttpHeaders; import io.undertow.util.HeaderMap; import org.apache.tomcat.util.http.MimeHeaders; import org.eclipse.jetty.http.HttpFields; +import org.junit.After; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; @@ -57,6 +59,11 @@ public class HeadersAdaptersTests { }; } + @After + public void tearDown() { + this.headers.clear(); + } + @Test public void getWithUnknownHeaderShouldReturnNull() { assertNull(this.headers.get("Unknown")); @@ -96,4 +103,12 @@ public class HeadersAdaptersTests { assertEquals("first", this.headers.get("TestHeader").get(0)); } -} + @Test + public void putShouldOverrideExisting() { + this.headers.add("TestHeader", "first"); + this.headers.put("TestHeader", Arrays.asList("override")); + assertEquals("override", this.headers.getFirst("TestHeader")); + assertEquals(1, this.headers.get("TestHeader").size()); + } + +} \ No newline at end of file