欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

@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验证

@RequestParam和@RequestBody的区别
代码:

public List<User> get (@RequestParam(value="username",required = false) String username){
}

场景1 成功最常用用法

3.2 场景2验证

@RequestParam和@RequestBody的区别
@RequestParam和@RequestBody的区别
get请求的from-data方式无法适用@RequestParam username参数获取为空,如果是required=true的话直接进不到controller中,会直接返回400客户端传参错误。

场景3:

结果和场景 2相同,不赘述。

场景4:

get请求传请求体的情况:注意这样是可以的,但是一般不会这样用而已,因为还有post
@RequestParam和@RequestBody的区别
@RequestParam和@RequestBody的区别
结论:参数接收成功。get请求中的请求体,@Requestparam是不可能获取到的,这里不做证明,仅对@RequestBody证明 其他的场景也是如此,下面将不做赘述。

post请求中5-8场景已在本地试过,有兴趣可以自己尝试下。下面再看下put和delete;

场景9

@RequestParam和@RequestBody的区别
@RequestParam和@RequestBody的区别

场景10

@RequestParam和@RequestBody的区别
@RequestParam和@RequestBody的区别
报400错误

场景11

@RequestParam和@RequestBody的区别
@RequestParam和@RequestBody的区别

场景12

@RequestParam和@RequestBody的区别
@RequestParam和@RequestBody的区别

场景13

@RequestParam和@RequestBody的区别
@RequestParam和@RequestBody的区别

场景14

@RequestParam和@RequestBody的区别
失败。400错误

场景15

@RequestParam和@RequestBody的区别
400参数错误

场景16

@RequestParam和@RequestBody的区别
@RequestParam和@RequestBody的区别
总结:表格中空白的地方是无需测试的内容;因为请求体中的参数只能通过@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