3

我正在使用第 3 方 REST API,它在其 JSON 响应中返回“NaN”:( 我无法更改响应。

我正在使用带有 RestTemplate 的 Spring MVC 和内置的消息转换器将 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 回答