为Spring RestTemplate配置自定义ObjectMapper

Configuring a Custom ObjectMapper for Spring RestTemplate

old map

了解有关为Spring RestTemplate创建自定义ObjectMapper的更多信息。

RestTemplate的一大优点是它的简单性。您只需像这样实例化它... RestTemplate RestTemplate = new RestTemplate();然后关闭。在后台,Spring自动创建并注册了许多消息转换器,以处理请求和响应的各种数据格式。

MappingJackson2HttpMessageConverter使用Jackson将POJO映射到JSON,反之亦然。创建MappingJackson2HttpMessageConverter时,将为其指定一个新的ObjectMapper实例。在许多情况下,默认的ObjectMapper实例很好,但是有时您可能需要自定义所使用的ObjectMapper

您可能还会喜欢:如何使用Spring RestTemplate将数据发布到Web服务

例如,我最近遇到一个问题,我需要配置Jackson来接受这样的不区分大小写的属性。

1
2
3
4
5
6
7
private ObjectMapper createObjectMapper() {

     ObjectMapper ObjectMapper = new ObjectMapper();
     ObjectMapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true);

     return ObjectMapper;
}

要使自定义ObjectMapper可用于MappingJackson2HttpMessageConverter,只需创建一个新的MappingJackson2HttpMessageConverter并传入ObjectMapper实例即可。

1
2
3
4
5
6
private MappingJackson2HttpMessageConverter createMappingJacksonHttpMessageConverter() {

    MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
    converter.setObjectMapper(createObjectMapper());
    return converter;
}

然后,您可以创建一个RestTemplate并将自定义MappingJackson2HttpMessageConverter添加到其消息转换器列表中。

1
2
3
4
5
6
@Bean
public RestTemplate createRestTemplate() {

     RestTemplate RestTemplate = new RestTemplate();
     RestTemplate.getMessageConverters().add(0, createMappingJacksonHttpMessageConverter());
}

请注意,您应该将其添加到列表的开头,以使其优先于Spring已经注册的默认MappingJackson2HttpMessageConverter

进一步阅读

如何使用Spring RestTemplate将数据发布到Web服务

用Jackson处理JSON