RestTemplate 默认使用的是jackson 转换器,想要使用alibaba 的fastjson 转换器的话,可以移除原来的转换器,替换成fastjson。
注意,如果messageConverters.add(0,fastJsonHttpMessageConverter);我这边执行的时候会报错,目前还没找到原因。
@Bean
public RestTemplate restTemplate(ClientHttpRequestFactory factory) {
RestTemplate restTemplate = new RestTemplate(factory);
//换上fastjson
List<HttpMessageConverter<?>> messageConverters= restTemplate.getMessageConverters();
Iterator<HttpMessageConverter<?>> iterator=messageConverters.iterator();
while(iterator.hasNext()){
HttpMessageConverter<?> converter=iterator.next();
//原有的String是ISO-8859-1编码 去掉
if(converter instanceof StringHttpMessageConverter){
iterator.remove();
}
//由于系统中默认有jackson 在转换json时自动会启用 但是我们不想使用它 可以直接移除
if(converter instanceof GsonHttpMessageConverter || converter instanceof MappingJackson2HttpMessageConverter){
iterator.remove();
}
}
messageConverters.add(new StringHttpMessageConverter(Charset.forName("utf-8")));
FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter();
FastJsonConfig fastJsonConfig = new FastJsonConfig();
fastJsonConfig.setSerializerFeatures(
SerializerFeature.WriteMapNullValue,
SerializerFeature.WriteNullStringAsEmpty,
SerializerFeature.WriteNullListAsEmpty,
SerializerFeature.DisableCircularReferenceDetect);
fastJsonHttpMessageConverter.setFastJsonConfig(fastJsonConfig);
messageConverters.add(fastJsonHttpMessageConverter);
return restTemplate;
}