@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