引入FastJsonHttpMessageConverter需要注意的地方

爱被打了一巴掌 2022-02-27 11:33 1027阅读 0赞

应用场景:feign客户端

FastJsonHttpMessageConverter是基于fastjson的一种HttpMessageConverter,spring系统默认使用的是MappingJackson2HttpMessageConverter,但是在使用FastJsonHttpMessageConverter时要特别注意,因为FastJsonHttpMessageConverter很可能就会处理字符串类型,这样就可能会导致字符串在被fastjson序列化时出现转义字符,这样到了服务提供端就会出现无法解析的问题,但是fastjson又没有提供一个序列化特性:不序列化字符串,解决这个问题有两种解决方案:

1.在发送数据时feignclient客户端方法不要传递被fastjson序列化后的json字符串

2.

@Configuration
public class WebSecurityConfig extends WebMvcConfigurerAdapter {

  1. FastJsonHttpMessageConverter fastJsonHttpMessageConverter()\{
  2. FastJsonHttpMessageConverter fastJsonHttpMessageConverter=new FastJsonHttpMessageConverter();
  3. FastJsonConfig fastJsonConfig=new FastJsonConfig();
  4. fastJsonConfig.setSerializerFeatures(
  5. SerializerFeature.QuoteFieldNames,
  6. SerializerFeature.WriteMapNullValue,
  7. SerializerFeature.DisableCircularReferenceDetect,
  8. SerializerFeature.WriteDateUseDateFormat,
  9. SerializerFeature.WriteNullStringAsEmpty);
  10. List<MediaType> mediaTypeList=new ArrayList<>();
  11. mediaTypeList.add(MediaType.APPLICATION\_JSON\_UTF8);
  12. mediaTypeList.add(MediaType.APPLICATION\_JSON);
  13. fastJsonHttpMessageConverter.setSupportedMediaTypes(mediaTypeList);
  14. fastJsonHttpMessageConverter.setFastJsonConfig(fastJsonConfig);
  15. return fastJsonHttpMessageConverter;
  16. \}

//保证StringHttpMessageConverter在FastJsonHttpMessageConverter前被调用
@Override
public void extendMessageConverters(List> converters) {
//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多媒体类型,而没有判断传递的参数类型。

发表评论

表情:
评论列表 (有 0 条评论,1027人围观)

还没有评论,来说两句吧...

相关阅读

    相关 函数命名需要注意地方

    函数命名需要注意的地方包括:1、函数名应该简短明了,能够让人一眼看出其功能;2、不要使用与系统函数名称相同的函数名称;3、避免使用与变量名称相同的函数名称;4、函数名应该以字母