记一个以json格式传参,后台controller参数接收问题

探讨了在前后端交互中,如何通过JSON格式传递包括时间、布尔型在内的各种数据类型,并介绍了Spring框架中HttpMessageConverter的角色及其实现机制。

记一个以json格式传参,后台controller参数接收问题

问题描述

前端向后台以json格式传参时,碰到时间类型,boolean类型的参数该如何接受?

解决

先解决boolean类型的参数接收问题;
我们接收前端传进来的json,一般都是以一个实体类来接收 ,也就是vo。对于boolean类型的参数,只需将接收的实体类对应的属性的类型设置为boolean类型即可,spring框架会自动帮我们将传进来的参数转换为boolean类型。
对于日期时间类型的参数,可以用 @DateTimeFormat(pattern = "yy-MM-dd") 注解注释在实体类对应的属性上,这样spring框架就会帮我们将string类型的日期类型转换为我们上面设置的日期格式了。

思考

	关于类型转换器:HttpMessageConverter,它的作用是将传入到服务器的httpInputMessage转换为java对象,将服务器返回的java对象转换为httpOutputMessage响应给前端。
	对于json的类型转换器,有fastjson 、jackson等。作用都是将传入的json格式参数转换成java对象,将服务器返回的java对象转换为json响应给客户端。
	原理简单了解了一下,就是所有的类型转换器都会实现HttpMessageConverter接口,这个接口里定义了五个方法:
	boolean canRead(Class<?> , MediaType); //判断参数传入类型是否是本类型转换器可读类型,如果是,则会调用read() 方法将传入参数转换为java对象,判断依据就是请求头里的content-type的值。对于json格式转换器,则要求content-type为application/json;charset=UTF-8,否则不转换。
	boolean canWrite(Class<?>,MediaType);//判断能否将服务器返回的java类型转换为对应媒体类型响应给客户端。判断的依据是是否有需要转换的注解和请求头中accept属性是否包含对应的媒体类型。例如,json格式转换器,要求controller上标有@ResponseBody注解,请求头上的accpet属性必须要有application/json 。
	boolean getSupportedMediaType();//获取该类型转换器支持的媒体类型
	T read(Class<?> ,HttpInputMessage);//真实的将传入参数转换为java对象的方法
	void write(T ,MediaType,HttpOutputMessage);//将传出java对象转换为对应类型的响应的方法

扩展一点点

对于content-type的作用,它是告诉服务器,消息主体是以何种编码方式来进行编码的。
对于POST请求,有常见的四种取值:
application/x-www-form-urlencoded : 原生的form表单,如果不设置enctype属性,则默认以该形式提交数据
multipart/form-data : 当需要提交文件类型的数据时,需要让enctype 设为该值
application/json : 当需要提交json类型的数据时,让enctype设为该值
text/xml : 是一种使用 HTTP 作为传输协议,XML 作为编码方式的远程调用规范
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值