diff --git a/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/FeignClientsConfiguration.java b/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/FeignClientsConfiguration.java index f85e59b30..b4ab7c5b3 100644 --- a/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/FeignClientsConfiguration.java +++ b/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/FeignClientsConfiguration.java @@ -23,7 +23,10 @@ import feign.Feign; import feign.Logger; import feign.QueryMapEncoder; +import feign.Response; +import feign.ResponseInterceptor; import feign.Retryer; +import feign.Util; import feign.codec.Decoder; import feign.codec.Encoder; import feign.form.MultipartFormContentProcessor; @@ -112,6 +115,21 @@ public Decoder feignDecoder(ObjectProvider messageCo return new OptionalDecoder(new ResponseEntityDecoder(new SpringDecoder(messageConverters))); } + @Bean + @ConditionalOnMissingBean + public ResponseInterceptor feignResponseInterceptor() { + return (invocationContext, chain) -> { + Response response = chain.next(invocationContext); + if (invocationContext.returnType() == Response.class && response.body() != null + && response.body().length() == null) { + byte[] bodyData = Util.toByteArray(response.body().asInputStream()); + response.close(); + return response.toBuilder().body(bodyData).build(); + } + return response; + }; + } + @Bean @ConditionalOnMissingBean @ConditionalOnMissingClass("org.springframework.data.domain.Pageable")