diff --git a/core/src/main/java/feign/Response.java b/core/src/main/java/feign/Response.java index 46499067a6..bb4b60cd90 100644 --- a/core/src/main/java/feign/Response.java +++ b/core/src/main/java/feign/Response.java @@ -22,6 +22,7 @@ import java.nio.charset.Charset; import java.util.Collection; import java.util.Collections; +import java.util.LinkedHashMap; import java.util.LinkedList; import java.util.Locale; import java.util.Map; @@ -49,7 +50,9 @@ private Response(Builder builder) { this.status = builder.status; this.request = builder.request; this.reason = builder.reason; // nullable - this.headers = Collections.unmodifiableMap(caseInsensitiveCopyOf(builder.headers)); + this.headers = (builder.headers != null) + ? Collections.unmodifiableMap(caseInsensitiveCopyOf(builder.headers)) + : new LinkedHashMap<>(); this.body = builder.body; // nullable } diff --git a/core/src/test/java/feign/ResponseTest.java b/core/src/test/java/feign/ResponseTest.java index 01de421e97..e43d04ae79 100644 --- a/core/src/test/java/feign/ResponseTest.java +++ b/core/src/test/java/feign/ResponseTest.java @@ -71,4 +71,14 @@ public void headerValuesWithSameNameOnlyVaryingInCaseAreMerged() { Arrays.asList("Cookie-A=Value", "Cookie-B=Value", "Cookie-C=Value"); assertThat(response.headers()).containsOnly(entry(("set-cookie"), expectedHeaderValue)); } + + @Test + public void headersAreOptional() { + Response response = Response.builder() + .status(200) + .request(Request.create(HttpMethod.GET, "/api", Collections.emptyMap(), null, Util.UTF_8)) + .body(new byte[0]) + .build(); + assertThat(response.headers()).isNotNull().isEmpty(); + } }