From a4b31119289ce6d92cbc4e8f311f26cc13c815e1 Mon Sep 17 00:00:00 2001 From: Brian Clozel Date: Thu, 27 Nov 2025 16:32:06 +0100 Subject: [PATCH] Make HttpEntity headers mutables Since its inception, instantiating an `HttpEntity` makes its `HttpHeaders` read-only. While immutability is an interesting design principle, here we shouldn't enforce this. For example, developers can expect to instantiate a `ResponseEntity` and still mutate its headers. Closes gh-35888 --- .../main/java/org/springframework/http/HttpEntity.java | 5 ++--- .../java/org/springframework/http/HttpEntityTests.java | 10 ++++++++++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/spring-web/src/main/java/org/springframework/http/HttpEntity.java b/spring-web/src/main/java/org/springframework/http/HttpEntity.java index a83039bf55d..d55a6b89172 100644 --- a/spring-web/src/main/java/org/springframework/http/HttpEntity.java +++ b/spring-web/src/main/java/org/springframework/http/HttpEntity.java @@ -102,7 +102,7 @@ public class HttpEntity { */ public HttpEntity(@Nullable T body, @Nullable HttpHeaders headers) { this.body = body; - this.headers = HttpHeaders.readOnlyHttpHeaders(headers != null ? headers : new HttpHeaders()); + this.headers = (headers != null) ? headers : new HttpHeaders(); } /** @@ -123,8 +123,7 @@ public class HttpEntity { */ @Deprecated(since = "7.0", forRemoval = true) public HttpEntity(@Nullable T body, @Nullable MultiValueMap headers) { - this.body = body; - this.headers = HttpHeaders.readOnlyHttpHeaders(headers != null ? new HttpHeaders(headers) : new HttpHeaders()); + this(body, (headers != null) ? new HttpHeaders(headers) : new HttpHeaders()); } diff --git a/spring-web/src/test/java/org/springframework/http/HttpEntityTests.java b/spring-web/src/test/java/org/springframework/http/HttpEntityTests.java index 778664ed8b4..22f4570bf69 100644 --- a/spring-web/src/test/java/org/springframework/http/HttpEntityTests.java +++ b/spring-web/src/test/java/org/springframework/http/HttpEntityTests.java @@ -136,4 +136,14 @@ class HttpEntityTests { .isEmpty(); } + @Test + void headerAreMutable() { + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.TEXT_PLAIN); + String body = "foo"; + HttpEntity httpEntity = new HttpEntity<>(body, headers); + httpEntity.getHeaders().setContentType(MediaType.APPLICATION_JSON); + + } + }