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 94185798..938b8c80 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 @@ -1,5 +1,5 @@ /* - * Copyright 2013-2022 the original author or authors. + * Copyright 2013-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -78,6 +78,8 @@ public class SpringEncoder implements Encoder { private final ObjectProvider customizers; + private List> converters; + public SpringEncoder(ObjectFactory messageConverters) { this(new SpringFormEncoder(), messageConverters, new FeignEncoderProperties(), new EmptyObjectProvider<>()); } @@ -118,8 +120,7 @@ public class SpringEncoder implements Encoder { private void encodeWithMessageConverter(Object requestBody, Type bodyType, RequestTemplate request, MediaType requestContentType) { - List> converters = messageConverters.getObject().getConverters(); - customizers.forEach(customizer -> customizer.accept(converters)); + initConvertersIfRequired(); for (HttpMessageConverter messageConverter : converters) { FeignOutputMessage outputMessage; try { @@ -169,6 +170,13 @@ public class SpringEncoder implements Encoder { throw new EncodeException(message); } + private void initConvertersIfRequired() { + if (converters == null) { + converters = messageConverters.getObject().getConverters(); + customizers.forEach(customizer -> customizer.accept(converters)); + } + } + private boolean shouldHaveNullCharset(HttpMessageConverter messageConverter, FeignOutputMessage outputMessage) { return binaryContentType(outputMessage) || messageConverter instanceof ByteArrayHttpMessageConverter || messageConverter instanceof ProtobufHttpMessageConverter && ProtobufHttpMessageConverter.PROTOBUF