@RequestBody使用场景

视频
@RequestBody使用场景
你比如说我们在传递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请求去测试
@RequestBody使用场景
执行结果:
@RequestBody使用场景
可以看到说的是请求体缺失,因为get请求时没有请求体的没有当我们加上@RequestBody时就会报错,所以使用get请求时不能加这个注解

post表单形式传参

@RequestBody使用场景
执行结果:
@RequestBody使用场景
可以看到报的错是不支持的媒体类型,通过表单传参@RequestBody也是接收不到的

post json格式传参

通过json传参
@RequestBody使用场景
执行结果:
@RequestBody使用场景
@RequestBody使用场景
可以看到是没有问题的,能够接受到学生的参数信息

不带@RequestBody的情况

get请求

@RequestBody使用场景
@RequestBody使用场景

可以传参

post表单形式传参

执行结果:
@RequestBody使用场景

@RequestBody使用场景
也是可以接收到的

post json格式传参

执行结果:
@RequestBody使用场景
@RequestBody使用场景
虽然可以返回 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字符串的情况
@RequestBody使用场景
执行结果:

@RequestBody使用场景
我们可以看到他接收的是整个json字符串,跟我们想要的不一致

所以我们需要注意如果我们去使用@RequestBody修饰参数尽量的是一个实体或者map集合,map集合跟实体类类似,如果我们使用字符串去接收的话他不会把这个值赋给字符串,而是把整个请求的内容整体赋给字符串

@RequestParam使用场景

而类似的还有@RequestParam,这个注解跟我们什么都不加是类似的,但是他可以解决一种情况,就是前端传过来的请求参数的名和我们后端接收参数的名不一致的情况

@RequestBody使用场景
执行结果:
@RequestBody使用场景
@RequestBody使用场景

上一篇:iOS 单元测试之XCTest详解(一)


下一篇:cmder修改默认打开路径