3

JSON応答で「NaN」を返すサードパーティのREST APIを使用しています:(応答を変更できません。

Spring MVC を RestTemplate と組み込みのメッセージ コンバーターと共に使用して、JSON をオブジェクトに逆シリアル化しています。

JsonParser.Feature.ALLOW_NON_NUMERIC_NUMBERS応答で NaN を許可するようにプロパティを設定するスマートな方法があるかどうか疑問に思っていました。

自分で構成する必要のない他のメッセージコンバーターがあるため、現在次のことを行っています。

List<HttpMessageConverter<?>> converters = restTemplate.getMessageConverters();
for (HttpMessageConverter converter : converters) {
    if (converter instanceof MappingJacksonHttpMessageConverter) {
        ObjectMapper objectMapper = ((MappingJacksonHttpMessageConverter) converter).getObjectMapper();
        objectMapper.configure(JsonParser.Feature.ALLOW_NON_NUMERIC_NUMBERS, true);
    }
}

これは機能しますが、a) 繰り返し、b) このプロパティを設定するためだけに instanceof 比較を行っているという事実が気に入りません。

これを行うためのよりスマート/より良い方法は何でしょうか?

4

1 に答える 1

1

オプションは次のとおりです。

  1. インスタンス化して構成MappingJacksonHttpMessageConverterし、resttemplate のメッセージ コンバーターをそのインスタンスに設定します。を参照してくださいRestTemplate.html#setMessageConverters(java.util.List)。これにより、RestTemplate をインスタンス化するときに自動的にインスタンス化されるすべてのデフォルト メッセージ コンバーターが削除されることに注意してください。
  2. @JsonDeserialize を使用します。http://dev.sghill.net/2012/04/how-do-i-write-jackson-json-serializer.htmlを参照してください。
于 2013-05-20T16:42:16.020 に答える