Browse Source

Only allow a single content-type header to be applied while using googlehttpclient (#1737)

* Only allow a single content-type header to be applied while using google client

* Run code formatter

* Run formatter again via cmd line

Co-authored-by: Marvin Froeder <velo@users.noreply.github.com>
pull/1745/head
Szymon Mucha 2 years ago committed by GitHub
parent
commit
f09a72d5b2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 7
      googlehttpclient/src/main/java/feign/googlehttpclient/GoogleHttpClient.java
  2. 25
      googlehttpclient/src/test/java/feign/googlehttpclient/GoogleHttpClientTest.java

7
googlehttpclient/src/main/java/feign/googlehttpclient/GoogleHttpClient.java

@ -87,7 +87,12 @@ public class GoogleHttpClient implements Client { @@ -87,7 +87,12 @@ public class GoogleHttpClient implements Client {
// Setup headers
final HttpHeaders headers = new HttpHeaders();
for (final Map.Entry<String, Collection<String>> header : inputRequest.headers().entrySet()) {
headers.set(header.getKey(), header.getValue());
// We already set the Content-Type header via ByteArrayContent
// Content-Type is defined as a singleton field
// https://www.rfc-editor.org/rfc/rfc9110.html#section-8.3-7
if (!header.getKey().equals("Content-Type")) {
headers.set(header.getKey(), header.getValue());
}
}
// Some servers don't do well with no Accept header
if (inputRequest.headers().get("Accept") == null) {

25
googlehttpclient/src/test/java/feign/googlehttpclient/GoogleHttpClientTest.java

@ -15,7 +15,16 @@ package feign.googlehttpclient; @@ -15,7 +15,16 @@ package feign.googlehttpclient;
import feign.Feign;
import feign.Feign.Builder;
import feign.Response;
import feign.Util;
import feign.assertj.MockWebServerAssertions;
import feign.client.AbstractClientTest;
import okhttp3.mockwebserver.MockResponse;
import org.junit.Test;
import java.util.Collections;
import static feign.Util.UTF_8;
import static org.assertj.core.api.Assertions.entry;
import static org.junit.Assert.assertEquals;
import static org.junit.Assume.assumeFalse;
public class GoogleHttpClientTest extends AbstractClientTest {
@ -55,4 +64,20 @@ public class GoogleHttpClientTest extends AbstractClientTest { @@ -55,4 +64,20 @@ public class GoogleHttpClientTest extends AbstractClientTest {
assumeFalse("Google HTTP client client do not support gzip compression", false);
}
@Test
public void testContentTypeHeaderGetsAddedOnce() throws Exception {
server.enqueue(new MockResponse()
.setBody("AAAAAAAA"));
TestInterface api = newBuilder()
.target(TestInterface.class, "http://localhost:" + server.getPort());
Response response = api.postWithContentType("foo", "text/plain");
// Response length should not be null
assertEquals("AAAAAAAA", Util.toString(response.body().asReader(UTF_8)));
MockWebServerAssertions.assertThat(server.takeRequest())
.hasHeaders(entry("Content-Type", Collections.singletonList("text/plain")),
entry("Content-Length", Collections.singletonList("3")))
.hasMethod("POST");
}
}

Loading…
Cancel
Save