引入FastJsonHttpMessageConverter需要注意的地方
应用场景:feign客户端
FastJsonHttpMessageConverter是基于fastjson的一种HttpMessageConverter,spring系统默认使用的是MappingJackson2HttpMessageConverter,但是在使用FastJsonHttpMessageConverter时要特别注意,因为FastJsonHttpMessageConverter很可能就会处理字符串类型,这样就可能会导致字符串在被fastjson序列化时出现转义字符,这样到了服务提供端就会出现无法解析的问题,但是fastjson又没有提供一个序列化特性:不序列化字符串,解决这个问题有两种解决方案:
1.在发送数据时feignclient客户端方法不要传递被fastjson序列化后的json字符串
2.
@Configuration
public class WebSecurityConfig extends WebMvcConfigurerAdapter {
FastJsonHttpMessageConverter fastJsonHttpMessageConverter()\{
FastJsonHttpMessageConverter fastJsonHttpMessageConverter=new FastJsonHttpMessageConverter();
FastJsonConfig fastJsonConfig=new FastJsonConfig();
fastJsonConfig.setSerializerFeatures(
SerializerFeature.QuoteFieldNames,
SerializerFeature.WriteMapNullValue,
SerializerFeature.DisableCircularReferenceDetect,
SerializerFeature.WriteDateUseDateFormat,
SerializerFeature.WriteNullStringAsEmpty);
List<MediaType> mediaTypeList=new ArrayList<>();
mediaTypeList.add(MediaType.APPLICATION\_JSON\_UTF8);
mediaTypeList.add(MediaType.APPLICATION\_JSON);
fastJsonHttpMessageConverter.setSupportedMediaTypes(mediaTypeList);
fastJsonHttpMessageConverter.setFastJsonConfig(fastJsonConfig);
return fastJsonHttpMessageConverter;
\}
//保证StringHttpMessageConverter在FastJsonHttpMessageConverter前被调用
@Override
public void extendMessageConverters(List
//converters.removeIf(t -> t instanceof MappingJackson2HttpMessageConverter);
converters.clear();
StringHttpMessageConverter converter = new StringHttpMessageConverter(
Charset.forName(“UTF-8”));
converters.add(converter);
converters.add(fastJsonHttpMessageConverter());
}
拓展:之所以会出现上面的问题在于FastJsonHttpMessageConverter可以处理所有application/json多媒体类型,而没有判断传递的参数类型。
还没有评论,来说两句吧...