web-dev-qa-db-ja.com

Spring Cloud NetflixFeignでカスタムJacksonObjectMapperを設定する方法

サードパーティのAPI用に1回限りの@FeignClientを定義する必要があるシナリオに遭遇しています。このクライアントでは、@ Primaryのものとは異なるカスタムJacksonObjectMapperを使用したいと思います。 Springの偽の構成のデフォルトをオーバーライドできることは知っていますが、この特定のクライアントだけでObjectMapperを単純にオーバーライドする方法はわかりません。

8
Newbie

documentation に従って、以下に示すように、Feignクライアントにカスタムデコーダーを提供できます。

偽のクライアントインターフェイス:

@FeignClient(value = "foo", configuration = FooClientConfig.class)
public interface FooClient{
    //Your mappings
}

偽のクライアントカスタム構成:

@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;
    }
}
22
Newbie

@ NewBieの答えに従ってください、私はより良いものを与えることができます...

  @Bean
  public Decoder feignDecoder() {
    return new JacksonDecoder();
  }

feignクライアントでjacksonメッセージコンバーターを使用する場合は、JacksonDecoderを使用してください。SpringDecoderはfeignclient呼び出しの平均遅延を増加させるためです本番環境で

1
suiwenfeng