diff --git a/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/support/SpringEncoder.java b/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/support/SpringEncoder.java index 1c2194d93..56ae0e8ec 100644 --- a/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/support/SpringEncoder.java +++ b/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/support/SpringEncoder.java @@ -25,6 +25,7 @@ import java.util.Arrays; import java.util.Collection; import java.util.LinkedHashMap; +import java.util.Map; import java.util.Objects; import java.util.stream.Stream; @@ -94,7 +95,9 @@ public void encode(Object requestBody, Type bodyType, RequestTemplate request) t MediaType requestContentType = null; if (contentTypes != null && !contentTypes.isEmpty()) { String type = contentTypes.iterator().next(); - requestContentType = MediaType.valueOf(type); + if (!type.startsWith("{") || !type.endsWith("}")) { + requestContentType = MediaType.valueOf(type); + } } if (isFormRelatedContentType(requestContentType)) { @@ -242,7 +245,17 @@ protected final class FeignOutputMessage implements HttpOutputMessage { private final HttpHeaders httpHeaders; private FeignOutputMessage(RequestTemplate request) { - httpHeaders = getHttpHeaders(request.headers()); + Map> headers = new LinkedHashMap<>(request.headers()); + Collection contentTypes = headers.get(HttpEncoding.CONTENT_TYPE); + + if (contentTypes != null && !contentTypes.isEmpty()) { + String contentType = contentTypes.iterator().next(); + if (contentType.startsWith("{") && contentType.endsWith("}")) { + headers.remove(HttpEncoding.CONTENT_TYPE); + } + } + + httpHeaders = getHttpHeaders(headers); } @Override diff --git a/spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/support/SpringEncoderTests.java b/spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/support/SpringEncoderTests.java index f4af2ce89..34a410d9f 100644 --- a/spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/support/SpringEncoderTests.java +++ b/spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/support/SpringEncoderTests.java @@ -142,6 +142,19 @@ void testCustomGenericHttpMessageConverter() { .isEqualTo(StandardCharsets.UTF_8); } + @Test + void testContentTypeTemplate() { + Encoder encoder = this.context.getInstance("foo", Encoder.class); + assertThat(encoder).isNotNull(); + + RequestTemplate request = new RequestTemplate(); + request.header(CONTENT_TYPE, "{Content-Type}"); + + encoder.encode("hi", String.class, request); + + assertThat(request.body()).isNotNull(); + } + @Test void testBinaryData() { Encoder encoder = this.context.getInstance("foo", Encoder.class);