@RequestParam和@RequestBody的区别
程序员文章站
2022-06-16 12:13:40
...
1、作用:
@RequestParam:将请求参数绑定到你控制器的方法参数上(是springmvc中接收普通参数的注解)
@RequestBody:将请求体中的参数绑定到控制器的方法参数上
2、语法:
语法:@RequestParam(value=”参数名”,required=”true/false”,defaultValue=””)
value:参数名
required:是否包含该参数,默认为true,表示该请求路径中必须包含该参数,如果不包含就报错。
defaultValue:默认参数值,如果设置了该值,required=true将失效,自动为false,如果没有传该参数,就使用默认值
@RequestBody(required=”true/false”)
如果是放在String参数上则是json字符串,如果是自定义的类型则会根据参数名注入
3、适用场景
3.1 场景1验证
代码:
public List<User> get (@RequestParam(value="username",required = false) String username){
}
场景1 成功最常用用法
3.2 场景2验证
get请求的from-data方式无法适用@RequestParam username参数获取为空,如果是required=true的话直接进不到controller中,会直接返回400客户端传参错误。
场景3:
结果和场景 2相同,不赘述。
场景4:
get请求传请求体的情况:注意这样是可以的,但是一般不会这样用而已,因为还有post
结论:参数接收成功。get请求中的请求体,@Requestparam是不可能获取到的,这里不做证明,仅对@RequestBody证明 其他的场景也是如此,下面将不做赘述。
post请求中5-8场景已在本地试过,有兴趣可以自己尝试下。下面再看下put和delete;
场景9
场景10
报400错误
场景11
场景12
场景13
场景14
失败。400错误
场景15
400参数错误
场景16
总结:表格中空白的地方是无需测试的内容;因为请求体中的参数只能通过@RequestBody,不是请求体中的参数只可能通过@RequestParam获取
场景 | 请求方式 | 参数请求方式 | @RequestParam | @RequestBody |
---|---|---|---|---|
1 | get | ?拼接参数到url | √ | |
2 | get | form-data | × | |
3 | get | x-www-form-urlencoded | × | |
4 | get | application/json | √ | |
5 | post | ?拼接参数到url | √ | |
6 | post | form-data | √ | |
7 | post | x-www-form-urlencoded | √ | |
8 | post | application/json | √ | |
9 | put | ?拼接参数到url | √ | |
10 | put | form-data | × | |
11 | put | x-www-form-urlencoded | √ | |
12 | put | application/json | √ | |
13 | delete | ?拼接参数到url | √ | |
14 | delete | form-data | × | |
15 | delete | x-www-form-urlencoded | √ | |
16 | delete | application/json | √ |
上一篇: 二叉树的广度优先搜索-层次遍历
推荐阅读
-
JavaScript中的普通函数和箭头函数的区别和用法详解
-
php 中 SORT_REGULAR 和 SORT_STRING 的区别
-
Centos6和7的区别
-
MySQL的btree索引和hash索引的区别
-
xml - PHP的 DOMElement 和DomDocument 区别
-
java 字节流和字符流的区别详解
-
Oracle中视图和同义词的区别
-
软件测试学习 之 Python os._exit()&sys.exit()、exit(0)&exit(1) 的用法和区别
-
exit() 和 _exit() 的区别
-
【python】os._exit() 和 sys.exit(), exit(0)和exit(1) 的用法和区别