@requestBody的加与不加的区别
@requestBody的加与不加的区别
- (1)直接写名传参 post。如下:
- (2)post和get功能相同 如下:
- (3)serializeble实例化表单
- (4)contentType转化之后,需要加@requestBody,controller才能接收到数据。
- 总结 @requestBody加与不加的区别如下
今天在做项目实战回顾的时候发现@RequestParam注解不太了解。在网上搜索下了下,发现了篇好文章。防止将来丢失,在此做下记录。谢谢
看现象如下:发现ajaxDate有若干种写法。
(1)直接写名传参 post。如下:
打印ajaxDate如下格式:
虽然打印结果是json对象式,但最后会转为key1=value1&key2=value2的格式提交到后台 ,不需要加@requestBody。
(2)post和get功能相同 如下:
不需要加@requestBody
(3)serializeble实例化表单
打印结果如下:
表单 格式使用的是默认的ContentType类型application/x-www-form-urlencoded,格式为key1=value1&key2=value2提交到后台 ,不需要加@requestBody。
(4)contentType转化之后,需要加@requestBody,controller才能接收到数据。
ajaxDate打印结果如下:
前台将ajaxData转为json字符串,后台必须加@RequestBody注解的属性才能自定映射到值。
总结 @requestBody加与不加的区别如下
使用@requestBody.当请求content_type为:application/json类型的请求,数据类型为json时, json格式如下:{“aaa”:“111”,“bbb”:“222”}
不使用@requestBody.当请求content_type为:application/x-www-form-urlencoded类型的或multipart/form-data时,数据格式为aaa=111&bbb=222。
JQuery的$.ajax(url,[settings])
1.默认的ContentType的值为:application/x-www-form-urlencoded; charset=UTF-8
此格式为表单提交格式,数据为key1=value1&key2=value2的格式 。图二serrializeble,只用的是默认contentType类型。
2.虽然ajax的data属性值格式为:{key1:value1,key2:value2},但最后会转为key1=value1&key2=value2的格式提交到后台 。图二,虽然打印出的结果是不是&格式的,但是会转化。
3.如果ajax要和springmvc交互,要使用key1=value1&key2=value2的格式,后台springmvc只需要定义对象或者参数就行了,会自动映射。
4.如果springmvc的参数有@RequestBody注解(接收json字符串格式数据),ajax必须将date属性值转为json字符串,不能为json对象(js对象,会自动转为key=value形式)。并且,修改contentType的值为:application/json; charset=UTF-8,这样加了@RequestBody注解的属性才能自定映射到值。
5.使用在进行图片或者文件上传时使用 multipart/form-data 类型时、 数据会自动进行映射不要添加任何注解。
转载: https://blog.csdn.net/jiashanshan521/article/details/88244735
AvatorList: 别的文章一大堆 反而适得其反
XuXinCHN: 你确定绑定的是value?value是预先确定下来类别啊,作为值传到服务器,怎么能通过用户修改?这又不是文本框,文本框才是绑定value,这个应该是绑定selected吧。就像单选框和复选框绑定的也不是value而是checked。
qq_41277022: 是JSON字符串
tonight9: 大概来说 json对象 一定要用 @requestBody ,其他随意吗 这玩意确实 挺迷的 用接口测试工具总怪怪的
皙风: 写的好,下面的参考文章没了,哎