我应该如何在Spring Message Converter的Object Mapper上设置一个功能?

时间:2013-05-20 15:24:46

标签: json spring spring-mvc jackson resttemplate

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

我正在使用带有RestTemplate的Spring MVC和内置的消息转换器将JSON反序列化为Object。

我想知道,如果有一种智能方法可以设置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)进行比较的实例只是为了设置这个属性。

更聪明/更好的方法是什么?

1 个答案:

答案 0 :(得分: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