У меня есть сценарий, где мне нужно определить одноразовый @FeignClient для стороннего API. В этом клиенте я бы хотел использовать пользовательский объект ObjectMapper, который отличается от моего @Primary. Я знаю, что можно переопределить настройки конфигурации feign Spring, но мне не ясно, как просто переопределить ObjectMapper именно этим конкретным клиентом.Как настроить пользовательский объект ObjectMapper с Spring Cloud Netflix Feign
3
A
ответ
8
В соответствии с documentation, вы можете предоставить пользовательский декодер для своего клиента Feign, как показано ниже.
Feign Интерфейс клиента:
@FeignClient(value = "foo", configuration = FooClientConfig.class)
public interface FooClient{
//Your mappings
}
Feign Клиент Пользовательские настройки:
@Configuration
public class FooClientConfig {
@Bean
public Decoder feignDecoder() {
HttpMessageConverter jacksonConverter = new MappingJackson2HttpMessageConverter(customObjectMapper());
ObjectFactory<HttpMessageConverters> objectFactory =() -> new HttpMessageConverters(jacksonConverter);
return new ResponseEntityDecoder(new SpringDecoder(objectFactory));
}
public ObjectMapper customObjectMapper(){
ObjectMapper objectMapper = new ObjectMapper();
//Customize as much as you want
return objectMapper;
}
}
+0
работал для меня просто с 'return new JacksonDecoder (customObjectMapper());' – leveluptor
Вы пробовали это, и это не работает? Spring Cloud Feign использует тот же объект HttpMessageConverters, который использует Spring MVC. Конфигурируя его, обычный режим Spring Boot должен «просто работать» (подумал, что я сам не пробовал). http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#howto-customize-the-jackson-objectmapper – spencergibb
@spencergibb Я могу переопределить ObjectMapper и правильно использовать все Spring MVC и всех клиентов Feign. Тем не менее, мне нужен конкретный клиент-клик, из многих, использовать другой сопоставитель объектов из настроенного по умолчанию. Я не уверен, как начать работу. – Newbie
Вам нужно будет создать «SpringDecoder», используя ссылку doc, ранее опубликованную и помешанную там. – spencergibb