Skip to content

Commit 85262a7

Browse files
committed
Fix Map.put contract for HeadersAdapter impl.
This commit fixes the `Map.put` contract for both Reactor Netty and Tomcat specific `HeadersAdapter` implementations. Issue: SPR-17415
1 parent 862dd23 commit 85262a7

File tree

3 files changed

+18
-2
lines changed

3 files changed

+18
-2
lines changed

spring-web/src/main/java/org/springframework/http/server/reactive/NettyHeadersAdapter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ public List<String> get(Object key) {
124124
@Override
125125
public List<String> put(String key, @Nullable List<String> value) {
126126
List<String> previousValues = this.headers.getAll(key);
127-
this.headers.add(key, value);
127+
this.headers.set(key, value);
128128
return previousValues;
129129
}
130130

spring-web/src/main/java/org/springframework/http/server/reactive/TomcatHeadersAdapter.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,7 @@ public List<String> get(Object key) {
138138
@Nullable
139139
public List<String> put(String key, List<String> value) {
140140
List<String> previousValues = get(key);
141+
this.headers.removeHeader(key);
141142
value.forEach(v -> this.headers.addValue(key).setString(v));
142143
return previousValues;
143144
}

spring-web/src/test/java/org/springframework/http/server/reactive/HeadersAdaptersTests.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,14 @@
1616

1717
package org.springframework.http.server.reactive;
1818

19+
import java.util.Arrays;
1920
import java.util.Locale;
2021

2122
import io.netty.handler.codec.http.DefaultHttpHeaders;
2223
import io.undertow.util.HeaderMap;
2324
import org.apache.tomcat.util.http.MimeHeaders;
2425
import org.eclipse.jetty.http.HttpFields;
26+
import org.junit.After;
2527
import org.junit.Test;
2628
import org.junit.runner.RunWith;
2729
import org.junit.runners.Parameterized;
@@ -57,6 +59,11 @@ public static Object[][] arguments() {
5759
};
5860
}
5961

62+
@After
63+
public void tearDown() {
64+
this.headers.clear();
65+
}
66+
6067
@Test
6168
public void getWithUnknownHeaderShouldReturnNull() {
6269
assertNull(this.headers.get("Unknown"));
@@ -96,4 +103,12 @@ public void addShouldKeepOrdering() {
96103
assertEquals("first", this.headers.get("TestHeader").get(0));
97104
}
98105

99-
}
106+
@Test
107+
public void putShouldOverrideExisting() {
108+
this.headers.add("TestHeader", "first");
109+
this.headers.put("TestHeader", Arrays.asList("override"));
110+
assertEquals("override", this.headers.getFirst("TestHeader"));
111+
assertEquals(1, this.headers.get("TestHeader").size());
112+
}
113+
114+
}

0 commit comments

Comments
 (0)