2016-12-21 4 views
1

私は書いていないが、修正しようとしている既存のSpringベースのRESTクライアントを持っています。私たちのリモートRESTサービスの1つが私たちにフィールドを追加し、JSON解析が失敗しました。私は未知のフィールドが一般的に無視されるようにコンバータを設定しようとしています。バージョン2.1.0から、私たちはcom.fasterxml.jackson.core、ジャクソン・コア、ジャクソン・データバインド、およびジャクソン・アノテーションを使用しているMappingJakcson2HttpMessageConverterで認識されないフィールドを無視しようとしています

public void setRestTemplate(RestTemplate restTemplate) { 
    restTemplate.getMessageConverters().add(new FormHttpMessageConverter()); 

    // configure the JSON converter to ignore unknown properties 
    MappingJackson2HttpMessageConverter jsonConverter = new MappingJackson2HttpMessageConverter(); 
    ObjectMapper objectMapper = jsonConverter.getObjectMapper(); // new ObjectMapper(); 
    objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); 
    restTemplate.getMessageConverters().add(jsonConverter); 

    this.restTemplate = restTemplate; 
} 

:私は、セットアップ時に実行する次のコードを持っています。

上記のコードを使用すると、InvocationTargetException、「JSONを読み取れませんでした:認識されないフィールド」でREST呼び出しが失敗します。フィールドを置くと、オブジェクトに非整列化が記述されますが、エラーは消えます。

MappingJackson2HttpMessageConverterの代わりにMappingJacksonHttpMessageConverterを使用した他のコードから上記のコードを適用しました。問題ありますか?これで、フィールドは無視されませんが、注釈を使用して未知のプロパティを無視すると、フィールドは無視されます。私はむしろこれをマッパー・レベルに置いて、単一の構成ですべてのオブジェクトに適用するようにします。

誰も私が上記の設定に間違っていたのを見ますか?

答えて

1

MessageConvertersリストに新しいMappingJackson2HttpMessageConverterインスタンスを追加すると、RestTemplateのリストに2つのMappingJackson2HttpMessageConverterインスタンスが追加されます。これは、restTemplateにデバッガを置くことで確認できます。 MappingJackson2HttpMessageConverterの既存のインスタンスがカスタマイズされたインスタンスではなく選択されている可能性があります。これを修正するには、既存のインスタンスを削除し、以下のように新しいインスタンスを追加することができます。

public void setRestTemplate(RestTemplate restTemplate) { 
    //Remove existing MappingJackson2HttpMessageConverter from restTemplate 
    final Iterator<HttpMessageConverter<?>> iterator = restTemplate.getMessageConverters().iterator(); 
     while(iterator.hasNext()){ 
      final HttpMessageConverter<?> converter = iterator.next(); 
      if(converter instanceof MappingJackson2HttpMessageConverter){ 
       iterator.remove(); 
       break; 
      } 
     } 

    //Add new MappingJackson2HttpMessageConverter 
    MappingJackson2HttpMessageConverter jsonConverter = new MappingJackson2HttpMessageConverter(); 
    ObjectMapper objectMapper = jsonConverter.getObjectMapper(); 
    objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); 
    restTemplate.getMessageConverters().add(jsonConverter); 
    this.restTemplate = restTemplate; 
} 
関連する問題