diff --git a/core/src/main/java/feign/DefaultClient.java b/core/src/main/java/feign/DefaultClient.java index d8e02fb4ad..fd75ed14bd 100644 --- a/core/src/main/java/feign/DefaultClient.java +++ b/core/src/main/java/feign/DefaultClient.java @@ -189,7 +189,7 @@ else if (field.equals(ACCEPT_ENCODING)) { byte[] body = request.body(); - if (body != null) { + if (body != null && (body.length > 0 || request.httpMethod() != Request.HttpMethod.GET)) { /* * Ignore disableRequestBuffering flag if the empty body was set, to ensure that internal * retry logic applies to such requests. diff --git a/core/src/test/java/feign/client/DefaultClientTest.java b/core/src/test/java/feign/client/DefaultClientTest.java index c61b1b0a4d..2ebc2ca1fe 100644 --- a/core/src/test/java/feign/client/DefaultClientTest.java +++ b/core/src/test/java/feign/client/DefaultClientTest.java @@ -24,6 +24,8 @@ import feign.DefaultClient; import feign.Feign; import feign.Feign.Builder; +import feign.Request; +import feign.Request.HttpMethod; import feign.RetryableException; import feign.assertj.MockWebServerAssertions; import java.io.IOException; @@ -101,6 +103,22 @@ public void noRequestBodyForPostWithAllowRestrictedHeaders() throws Exception { .hasHeaders(entry("Content-Length", Collections.singletonList("0"))); } + @Test + void emptyBodyDoesNotConvertGetToPost() throws Exception { + server.enqueue(new MockResponse().setBody("foo")); + Request request = + Request.create( + HttpMethod.GET, + "http://localhost:" + server.getPort() + "/", + Collections.emptyMap(), + new byte[0], + null); + + new DefaultClient(null, null).execute(request, new Request.Options()); + + MockWebServerAssertions.assertThat(server.takeRequest()).hasMethod("GET"); + } + @Test @Override public void noResponseBodyForPut() throws Exception {