引入FastJsonHttpMessageConverter需要注意的地方 爱被打了一巴掌 2022-02-27 11:33 834阅读 0赞 应用场景: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<HttpMessageConverter<?>> 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多媒体类型,而没有判断传递的参数类型。
还没有评论,来说两句吧...