From 589a0a91248dfe916079316397fb95310784620c Mon Sep 17 00:00:00 2001 From: Alexander Zadvinskiy Date: Fri, 4 Mar 2022 17:59:04 +0300 Subject: [PATCH 1/2] Add ability use case insensitive headers for default Client --- core/src/main/java/feign/Client.java | 9 +++++---- .../java/feign/client/DefaultClientTest.java | 19 +++++++++++++++++++ 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/core/src/main/java/feign/Client.java b/core/src/main/java/feign/Client.java index 38058eccd..b52d1cd30 100644 --- a/core/src/main/java/feign/Client.java +++ b/core/src/main/java/feign/Client.java @@ -20,6 +20,7 @@ import static feign.Util.checkArgument; import static feign.Util.checkNotNull; import static feign.Util.isNotBlank; +import static java.lang.String.CASE_INSENSITIVE_ORDER; import static java.lang.String.format; import feign.Request.Options; import java.io.IOException; @@ -31,9 +32,9 @@ import java.nio.charset.StandardCharsets; import java.util.Base64; import java.util.Collection; -import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.TreeMap; import java.util.zip.DeflaterOutputStream; import java.util.zip.GZIPInputStream; import java.util.zip.GZIPOutputStream; @@ -114,7 +115,7 @@ Response convertResponse(HttpURLConnection connection, Request request) throws I connection.getRequestMethod(), connection.getURL())); } - Map> headers = new LinkedHashMap<>(); + Map> headers = new TreeMap<>(CASE_INSENSITIVE_ORDER); for (Map.Entry> field : connection.getHeaderFields().entrySet()) { // response message if (field.getKey() != null) { @@ -130,9 +131,9 @@ Response convertResponse(HttpURLConnection connection, Request request) throws I if (status >= 400) { stream = connection.getErrorStream(); } else { - if (this.isGzip(connection.getHeaderFields().get(CONTENT_ENCODING))) { + if (this.isGzip(headers.get(CONTENT_ENCODING))) { stream = new GZIPInputStream(connection.getInputStream()); - } else if (this.isDeflate(connection.getHeaderFields().get(CONTENT_ENCODING))) { + } else if (this.isDeflate(headers.get(CONTENT_ENCODING))) { stream = new InflaterInputStream(connection.getInputStream()); } else { stream = connection.getInputStream(); diff --git a/core/src/test/java/feign/client/DefaultClientTest.java b/core/src/test/java/feign/client/DefaultClientTest.java index 898902e03..7ba7bedb3 100644 --- a/core/src/test/java/feign/client/DefaultClientTest.java +++ b/core/src/test/java/feign/client/DefaultClientTest.java @@ -170,6 +170,25 @@ public void canSupportGzip() throws Exception { } + @Test + public void canExeptCaseInsensitiveHeader() throws Exception { + /* enqueue a zipped response */ + final String responseData = "Compressed Data"; + server.enqueue(new MockResponse() + .addHeader("content-encoding", "gzip") + .setBody(new Buffer().write(compress(responseData)))); + + TestInterface api = newBuilder() + .target(TestInterface.class, "http://localhost:" + server.getPort()); + + String result = api.get(); + + /* verify that the response is unzipped */ + assertThat(result).isNotNull() + .isEqualToIgnoringCase(responseData); + + } + @Test public void canSupportDeflate() throws Exception { /* enqueue a zipped response */ From 0295166f1966436724b98623d96a86f6149d5aa6 Mon Sep 17 00:00:00 2001 From: Alexander Zadvinskiy Date: Fri, 4 Mar 2022 18:17:30 +0300 Subject: [PATCH 2/2] Add ability use case insensitive headers for default Client --- core/src/main/java/feign/Client.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/java/feign/Client.java b/core/src/main/java/feign/Client.java index b52d1cd30..885fac861 100644 --- a/core/src/main/java/feign/Client.java +++ b/core/src/main/java/feign/Client.java @@ -115,7 +115,7 @@ Response convertResponse(HttpURLConnection connection, Request request) throws I connection.getRequestMethod(), connection.getURL())); } - Map> headers = new TreeMap<>(CASE_INSENSITIVE_ORDER); + Map> headers = new TreeMap<>(CASE_INSENSITIVE_ORDER); for (Map.Entry> field : connection.getHeaderFields().entrySet()) { // response message if (field.getKey() != null) {