视频
你比如说我们在传递post请求时是以表单形式传递
带@RequestBody的情况
直接上测试代码
@RestController
@RequestMapping("/student")
public class StudentController {
@RequestMapping("/add")
public String addStudent(@RequestBody Student student){
System.out.println(student);
return "add ok";
}
}
@Data
class Student{
String name;
int age;
}
get请求
首先我们使用get请求去测试
执行结果:
可以看到说的是请求体缺失,因为get请求时没有请求体的没有当我们加上@RequestBody
时就会报错,所以使用get请求时不能加这个注解
post表单形式传参
执行结果:
可以看到报的错是不支持的媒体类型,通过表单传参@RequestBody
也是接收不到的
post json格式传参
通过json传参
执行结果:
可以看到是没有问题的,能够接受到学生的参数信息
不带@RequestBody的情况
get请求
可以传参
post表单形式传参
执行结果:
也是可以接收到的
post json格式传参
执行结果:
虽然可以返回 ok 但是接收的数据为空
所以我们得到结论,如果我们处理的是json格式的数据,我们需要加上@RequestBody
注解,但是如果我们处理的是get请求或者是表单形式是不需要加上这个注解的。
接收请求的参数是字符串的情况
@RestController
@RequestMapping("/student")
public class StudentController {
@RequestMapping("/add")
public String addStudent(@RequestBody String name){
System.out.println(name);
return "add ok";
}
}
@Data
class Student{
String name;
int age;
}
如果我们直接需要接受name 的值,但是传的是json字符串的情况
执行结果:
我们可以看到他接收的是整个json字符串,跟我们想要的不一致
所以我们需要注意如果我们去使用@RequestBody
修饰参数尽量的是一个实体或者map集合,map集合跟实体类类似,如果我们使用字符串去接收的话他不会把这个值赋给字符串,而是把整个请求的内容整体赋给字符串
@RequestParam使用场景
而类似的还有@RequestParam
,这个注解跟我们什么都不加是类似的,但是他可以解决一种情况,就是前端传过来的请求参数的名和我们后端接收参数的名不一致的情况
执行结果: