2016-03-07 11 views
3

У меня есть сценарий, где мне нужно определить одноразовый @FeignClient для стороннего API. В этом клиенте я бы хотел использовать пользовательский объект ObjectMapper, который отличается от моего @Primary. Я знаю, что можно переопределить настройки конфигурации feign Spring, но мне не ясно, как просто переопределить ObjectMapper именно этим конкретным клиентом.Как настроить пользовательский объект ObjectMapper с Spring Cloud Netflix Feign

+0

Вы пробовали это, и это не работает? 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

+0

@spencergibb Я могу переопределить ObjectMapper и правильно использовать все Spring MVC и всех клиентов Feign. Тем не менее, мне нужен конкретный клиент-клик, из многих, использовать другой сопоставитель объектов из настроенного по умолчанию. Я не уверен, как начать работу. – Newbie

+0

Вам нужно будет создать «SpringDecoder», используя ссылку doc, ранее опубликованную и помешанную там. – spencergibb

ответ

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

 Смежные вопросы

  • Нет связанных вопросов^_^