文章目录
1、使用方式
1> pom中引入fastjson相关依赖:
<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.77</version></dependency>
2> 添加FastJsonHttpMessageConverter类型转换器配置(这种配置方式是无效的):
@ConfigurationpublicclassFastJsonMessageConverterConfigimplementsWebMvcConfigurer{publicFastJsonHttpMessageConverterfastJsonHttpMessageConverter(){returnnewFastJsonHttpMessageConverter();}@OverridepublicvoidconfigureMessageConverters(List<HttpMessageConverter<?>> converters){
converters.add(fastJsonHttpMessageConverter());}}
3> JSON字符串对应的JAVA模型:
@DatapublicclassPerson{privateString name;privateInteger age;privateBoolean sex;privateString otherInfo;}
4> 后端Controller接口:
2、FastJsonHttpMessageConverter 不生效问题
@ConfigurationpublicclassFastJsonMessageConverterConfigimplementsWebMvcConfigurer{publicFastJsonHttpMessageConverterfastJsonHttpMessageConverter(){returnnewFastJsonHttpMessageConverter();}@OverridepublicvoidconfigureMessageConverters(List<HttpMessageConverter<?>> converters){
converters.add(fastJsonHttpMessageConverter());}}
使用上述配置方式配置FastJsonHttpMessageConverter,其不会生效,解析JSON类型参数依旧是使用的MappingJackson2HttpMessageConverter。
因为自定义的FastJsonHttpMessageConverter 排在所有MessageConverter的最后;
- PS:《传送链接》Spring MVC 如何解析各种参数数据(3月13日早8点发出)
- 根据消息转换器的应用规则,会顺序选择符合要求的消息转换器,当有一个合适的MessageConverter之后,不会再看后面的MessageConverter。
- 而MappingJackson2HttpMessageConverter 在 FastJsonHttpMessageConverter 之前,所以会使用MappingJackson2HttpMessageConverter 进行消息转换 ;
解决措施
解决措施很简单:将FastJsonHttpMessageConverter消息转换器 添加在MappingJackson2HttpMessageConverter 前面;
@ConfigurationpublicclassFastJsonMessageConverterConfig{@BeanpublicHttpMessageConvertersfastJsonHttpMessageConverters(){returnnewHttpMessageConverters(newFastJsonHttpMessageConverter());}}
效果:
3、作用
用于解析JSON类型参数的FastJsonHttpMessageConverter相比于Spring MVC原生携带的MappingJackson2HttpMessageConverter多了两个作用:
- FastJson可以解析文本格式的JSON字符串参数,自动给json请求添加请求头:Content-Type:application/json;
- 将参数下划线转为驼峰; 比如:
other_info 转为 otherInfo
;
1)解析文本格式的json字符串参数
2)参数下划线转驼峰
4、实现方式
FastJsonHttpMessageConverter处理请求参数的入口如下:
1)FastJsonHttpMessageConverter#canRead()
判断FastJsonHttpMessageConverter是否可以转换当前ContentType的请求:
- FastJsonHttpMessageConverter可以转换任意类型的请求。
2)FastJsonHttpMessageConverter#read()
直接调用FastJson的序列化API将JSON字符串数据系列化为相应的Java Type。
版权归原作者 秃秃爱健身 所有, 如有侵权,请联系我们删除。