diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/DefaultClientResponseBuilder.java b/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/DefaultClientResponseBuilder.java index ce5e6c4dba9a..38d03377b9a4 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/DefaultClientResponseBuilder.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/DefaultClientResponseBuilder.java @@ -144,7 +144,7 @@ public ClientResponse.Builder headers(Consumer headersConsumer) { @SuppressWarnings({"ConstantConditions", "NullAway"}) private HttpHeaders getHeaders() { if (this.headers == null) { - this.headers = new HttpHeaders(this.originalResponse.headers().asHttpHeaders()); + this.headers = HttpHeaders.copyOf(this.originalResponse.headers().asHttpHeaders()); } return this.headers; } diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/function/client/DefaultClientResponseBuilderTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/function/client/DefaultClientResponseBuilderTests.java index bb1f4056296c..8c2cfec690ce 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/function/client/DefaultClientResponseBuilderTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/function/client/DefaultClientResponseBuilderTests.java @@ -86,6 +86,9 @@ void mutate() { .cookies(cookies -> cookies.set("baz", ResponseCookie.from("baz", "quux").build())) .build(); + assertThat(otherResponse.headers().asHttpHeaders().getFirst("foo")).isEqualTo("bar"); + assertThat(otherResponse.headers().asHttpHeaders().getFirst("bar")).isEqualTo("baz"); + assertThat(otherResponse.cookies().getFirst("baz").getValue()).isEqualTo("qux"); assertThat(result.statusCode()).isEqualTo(HttpStatus.BAD_REQUEST); assertThat(result.headers().asHttpHeaders().size()).isEqualTo(3);