Always copy ServerResponse headers
Prior to this commit, ServerResponse headers would only be written if there were no existing headers with the same name, thus making it impossible to overwrite existing headers. With the changes in this commit, headers are always written. Closes gh-27741
This commit is contained in:
parent
40d2058b97
commit
2a5713f389
|
|
@ -362,9 +362,7 @@ class DefaultServerResponseBuilder implements ServerResponse.BodyBuilder {
|
|||
|
||||
private static <K,V> void copy(MultiValueMap<K,V> src, MultiValueMap<K,V> dst) {
|
||||
if (!src.isEmpty()) {
|
||||
src.entrySet().stream()
|
||||
.filter(entry -> !dst.containsKey(entry.getKey()))
|
||||
.forEach(entry -> dst.put(entry.getKey(), entry.getValue()));
|
||||
dst.putAll(src);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -320,6 +320,23 @@ public class DefaultServerResponseBuilderTests {
|
|||
assertThat(serverResponse.block().cookies().isEmpty()).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void overwriteHeaders() {
|
||||
ServerResponse serverResponse =
|
||||
ServerResponse.ok().headers(headers -> headers.set("Foo", "Bar")).build().block();
|
||||
assertThat(serverResponse).isNotNull();
|
||||
|
||||
MockServerWebExchange mockExchange = MockServerWebExchange
|
||||
.builder(MockServerHttpRequest.get("https://example.org"))
|
||||
.build();
|
||||
MockServerHttpResponse response = mockExchange.getResponse();
|
||||
response.getHeaders().set("Foo", "Baz");
|
||||
|
||||
serverResponse.writeTo(mockExchange, EMPTY_CONTEXT).block();
|
||||
|
||||
assertThat(response.getHeaders().getFirst("Foo")).isEqualTo("Bar");
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void build() {
|
||||
|
|
|
|||
Loading…
Reference in New Issue