【SpringBoot—注解】@requestBody 与@requestparam;@requestBody的加与不加的区别
一)首先说明xia @requestBody与@requestParam的区别
spring的RequestParam注解接收的参数是来自于requestHeader中,即请求头。都是用来获取请求路径(url )中的动态参数。也就是在url中,格式为xxx?username=123&password=456。功能与@pathvarible。
RequestBody注解接收的参数则是来自于requestBody中,即请求体中。
知识点:
(二)Content-Type,内容类型,一般是指网页中存在的Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件,这就是经常看到一些Asp网页点击的结果却是下载到的一个文件或一张图片的原因。
(三)问题,@requestBody到底在什么时候写与不写呢。
看现象如下:发现ajaxDate有若干种写法。

打印ajaxDate如下格式:

虽然打印结果是json对象式,但最后会转为key1=value1&key2=value2的格式提交到后台 ,不需要加@requestBody。
(2)serializeble实例化表单

打印结果如下:

表单 格式使用的是默认的ContentType类型application/x-www-form-urlencoded,格式为key1=value1&key2=value2提交到后台 ,不需要加@requestBody。
(3)contentType转化之后,需要加@requestBody,controller才能接收到数据。

ajaxData打印结果如下:

post和get功能相同:

前台将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 类型时、 数据会自动进行映射不要添加任何注解。
CSDN博主「jiashanshan521」原文链接:https://blog.csdn.net/jiashanshan521/article/details/88244735
【SpringBoot—注解】@requestBody 与@requestparam;@requestBody的加与不加的区别的更多相关文章
- @RequestParam详解以及加与不加的区别
以前写controller层的时候都是默认带上 @RequestParam 的, 今天发现不加@RequestParam 也能接收到参数 下面我们来区分一下加与不加的区别 这里有两种写法 @Reque ...
- href 里面 链接前面加/与不加的区别?(绝对路径与相对路径)
在写href链接时,有绝对路径与相对路径,href 里面 链接前面加/与不加的区别? href="/cp/images/lis.jpg" 相对路径 cp前面/会获取当前路径,组合成 ...
- 网站开发进阶(四十三)html中,路径前加“/” 与不加“/”的区别
网站开发进阶(四十三)html中,路径前加"/" 与不加"/"的区别 前言 <script src="js/downloadify.js&quo ...
- @RequestParam加与不加的区别
最简单的两种写法,加或不加@RequestParam注解 @RequestMapping("/list") public String test(int userId) { ret ...
- mybatis @SelectKey加于不加的区别
正常情况下,我们设置表的主键自增,然后: @Insert("insert into miaosha_order (user_id, goods_id, order_id)values(#{u ...
- 路径前面加与不加"/"的区别
加"/"是绝对路径, 不加"/"是相对路径.假设你的这个html文件的路径是www.example.com/path/to/html/a.html,那么src= ...
- js调用函数时括号加与不加的区别,function()&function
<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...
- 链接后加"/"与不加"/"的区别
1.http://www.abc.com/abc2.http://www.abc.com/abc/ 当Web服务器接收到对某个末尾不含斜杠的url请求时,例如“http://www.abc.com/a ...
- rediret 加/与不加/的区别
随机推荐
- java并发编程实战《四》互斥锁(下)
互斥锁(下):如何用一把锁保护多个资源? 一把锁可以保护多个资源,但是不能用多把锁来保护一个资源. 那如何保护多个资源? 当我们要保护多个资源时,首先要区分这些资源是否存在关联关系. 如下代码 ...
- PyQt(Python+Qt)学习随笔:exit code 1073741845与槽函数所在对象不能定义同名实例方法问题
最近做了几次测试,在PyQt中如果使用与槽函数同名的实例方法可能会导致不可控的错误. 案例1:如果两个信号映射到同名的槽函数,虽然参数不一样,但真正响应的槽函数是最后定义的槽函数,具体案例请见< ...
- CTF SHOW WEB_AK赛
CTF SHOW平台的WEB AK赛: 签到_观己 <?php if(isset($_GET['file'])){ $file = $_GET['file']; if(preg_match( ...
- python自带缓存lru_cache用法及扩展(详细)
本篇博客将结合python官方文档和源码详细讲述lru_cache缓存方法是怎么实现, 它与redis缓存的区别是什么, 在使用时碰上functiontools.wrap装饰器时会发生怎样的变化, ...
- BJOI2017 机动训练
落谷.Loj. Description 定义机动路径为: 没有自环 路径至少包含两个格子 从起点开始每一步都向不远离终点的方向移动 相同地形序列指路径上顺序经过的地形序列. 定义机动路径的权值为相同地 ...
- 基于Dokcer搭建Redis集群搭建(主从集群)
最近陆陆续续有不少园友加我好友咨询 redis 集群搭建的问题,我觉得之前写的这篇 <基于Docker的Redis集群搭建> 文章一定是有问题了,所以我花了几分钟浏览之前的文章总结了下面几 ...
- Java集合源码分析(四)——Vector
简介 Vector 是矢量队列,它是JDK1.0版本添加的类.继承于AbstractList,实现了List, RandomAccess, Cloneable这些接口. 和ArrayList不同,Ve ...
- 深入理解Java虚拟机(九)——后端编译与优化
即时编译器 Java程序最初都是通过解释器进行执行,当发现某个方法或者代码块被运行得非常频繁,这些代码就被认为是热点代码,为了提高这些代码得运行效率,虚拟机会把热点代码编译成本地机器码,并进行优化,运 ...
- STL—— 容器(vector)的数据插入之 insert()
vector 容器可以使用 vectorName.insert() 方法插入元素,vectorName.insert() 函数一共有4种重载方法: 第一种 insert() 用法:在指定地址插入单个元 ...
- 将命令行提示符里的执行结果导出到text文件中
为便于查看和保存命令行提示符里的执行结果, 可以使用 ">" 将执行结果导入到指定.txt文件中. 例如: 在命令行提示符里查看C盘文件,并将结果导入到E盘dir-c-out ...