使用FastJsonHttpMessageConverter解析@RequestBody参数

Posted 秃秃爱健身

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用FastJsonHttpMessageConverter解析@RequestBody参数相关的知识,希望对你有一定的参考价值。

文章目录

1、使用方式

1> pom中引入fastjson相关依赖:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.77</version>
</dependency>

2> 添加FastJsonHttpMessageConverter类型转换器配置(这种配置方式是无效的):

@Configuration
public class FastJsonMessageConverterConfig implements WebMvcConfigurer
	
	public FastJsonHttpMessageConverter fastJsonHttpMessageConverter() 
		return new FastJsonHttpMessageConverter();
	
	
	@Override
	public void configureMessageConverters(List<HttpMessageConverter<?>> converters) 
		converters.add(fastJsonHttpMessageConverter());
	

3> JSON字符串对应的JAVA模型:

@Data
public class Person 
    private String name;

    private Integer age;

    private Boolean sex;

    private String otherInfo;

4> 后端Controller接口:

2、FastJsonHttpMessageConverter 不生效问题

@Configuration
public class FastJsonMessageConverterConfig implements WebMvcConfigurer
	
	public FastJsonHttpMessageConverter fastJsonHttpMessageConverter() 
		return new FastJsonHttpMessageConverter();
	
	
	@Override
	public void configureMessageConverters(List<HttpMessageConverter<?>> converters) 
		converters.add(fastJsonHttpMessageConverter());
	

使用上述配置方式配置FastJsonHttpMessageConverter,其不会生效,解析JSON类型参数依旧是使用的MappingJackson2HttpMessageConverter。

因为自定义的FastJsonHttpMessageConverter 排在所有MessageConverter的最后;

  • PS:《传送链接》Spring MVC 如何解析各种参数数据(3月13日早8点发出)
  • 根据消息转换器的应用规则,会顺序选择符合要求的消息转换器,当有一个合适的MessageConverter之后,不会再看后面的MessageConverter。
  • 而MappingJackson2HttpMessageConverter 在 FastJsonHttpMessageConverter 之前,所以会使用MappingJackson2HttpMessageConverter 进行消息转换 ;

解决措施

解决措施很简单:将FastJsonHttpMessageConverter消息转换器 添加在MappingJackson2HttpMessageConverter 前面;

@Configuration
public class FastJsonMessageConverterConfig

	@Bean
	public HttpMessageConverters fastJsonHttpMessageConverters() 
		return new HttpMessageConverters(new FastJsonHttpMessageConverter());
	

效果:

3、作用

用于解析JSON类型参数的FastJsonHttpMessageConverter相比于Spring MVC原生携带的MappingJackson2HttpMessageConverter多了两个作用:

  1. FastJson可以解析文本格式的JSON字符串参数,自动给json请求添加请求头:Content-Type:application/json;
  2. 将参数下划线转为驼峰; 比如:other_info 转为 otherInfo

1)解析文本格式的json字符串参数

2)参数下划线转驼峰

4、实现方式

FastJsonHttpMessageConverter处理请求参数的入口如下:

1)FastJsonHttpMessageConverter#canRead()

判断FastJsonHttpMessageConverter是否可以转换当前ContentType的请求:

  • FastJsonHttpMessageConverter可以转换任意类型的请求。

2)FastJsonHttpMessageConverter#read()

直接调用FastJson的序列化API将JSON字符串数据系列化为相应的Java Type。

测试使用

测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用测试使用

以上是关于使用FastJsonHttpMessageConverter解析@RequestBody参数的主要内容,如果未能解决你的问题,请参考以下文章

在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?

今目标使用教程 今目标任务使用篇

Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)

MySQL db 在按日期排序时使用“使用位置;使用临时;使用文件排序”

使用“使用严格”作为“使用强”的备份

Kettle java脚本组件的使用说明(简单使用升级使用)