前言:
在项目中总是看到使用@PostMapping来实现查询的方法,并不是因为不知道要使用@GetMapping,是由于传递参数的原因,使用@PostMapping可以不用管理参数的传递,比较方便,相反,使用@GetMapping就总是会接收不到参数,导致空指针。下面就探究一下这两个注解接收参数。
这里并不是探究内部它是如何创建对象,赋值,只是单纯到的实验,只关注结果。
先上测试代码
@RestController
@RequestMapping("test")
public class ReceiveController {
@GetMapping("test1")
public void test1(Student student){
System.out.println("进入test1");
System.out.println(student.getAge());
System.out.println(student.getName());
System.out.println(student.getTeacher());
}
@GetMapping("test2")
public void test2(@RequestBody Student student){
System.out.println("进入test2");
System.out.println(student.getAge());
System.out.println(student.getName());
System.out.println(student.getTeacher());
}
@PostMapping("test3")
public void test3(Student student){
System.out.println("进入test3");
System.out.println(student.getAge());
System.out.println(student.getName());
System.out.println(student.getTeacher());
}
@PostMapping("test4")
public void test4(@RequestBody Student student){
System.out.println("进入test4");
System.out.println(student.getAge());
System.out.println(student.getName());
System.out.println(student.getTeacher());
}
}
//实体类
@Data
public class Student {
private String name;
private Integer age;
private Teacher teacher;
}
@Data
public class Teacher {
private String name;
private Integer age;
}
所有的测试都是使用Postman进行
测试test1
方式一:通过在地址后面拼接参数
http://localhost:8585/test/test1?name=小明&age=15&teacher.age=52&teacher.name=强哥
结果:成功得到所有的数据,注意使用teacher,name才能给里面内嵌的对象赋值
方式二:
请求体:在get方式中使用请求体发送数据显然很奇怪,按理说get请求方式是没有请求体的,这里使用的PostMan起码填写是可行的
{
"name":"小明",
"age":15,
"teacher.age":52,
"teacher.age":"强哥"
}
结果: 结果就都是空,一个都接收不到,这很显然,或许是请求体根本就没有传递过去,因为get方式就没有请求体
测试test2
方式一:通过在地址后面拼接参数
http://localhost:8585/test/test2?name=小明&age=15&teacher.age=52&teacher.name=强哥
结果:方法体都没进去,直接报400,Bad Request,get不能和@requestBody写到一起?
方式二:
请求体:
{
"name":"小明",
"age":15,
"teacher.age":52,
"teacher.age":"强哥"
}
结果: 奇怪的东西来了,小明和15接收到了,后面的teacher没有接收到,get还能接收请求体里面的东西?get方式有请求体?postMan中的Body不是请求体?估计是后者,这里可以研究一下postman的原理。
方式三:
请求体二:
{
"name":"小明",
"age":15,
"teacher":{
"name":"强哥",
"age":"52"
}
}
结果:全部接收到了,我陷入了沉思~~~~
测试test3
方式一:通过在地址后面拼接参数
http://localhost:8585/test/test3?name=小明&age=15&teacher.age=52&teacher.name=强哥
结果:全部接收到了
方式二:
请求体:
{
"name":"小明",
"age":15,
"teacher.age":52,
"teacher.age":"强哥"
}
结果:一个都没有接收到
方式三:
请求体二:
{
"name":"小明",
"age":15,
"teacher":{
"name":"强哥",
"age":"52"
}
}
结果:同样接收不到
测试test4
方式一:通过在地址后面拼接参数
http://localhost:8585/test/test4?name=小明&age=15&teacher.age=52&teacher.name=强哥
结果:400 错误 Bad Request
方式二:
请求体:
{
"name":"小明",
"age":15,
"teacher.age":52,
"teacher.age":"强哥"
}
结果:同测试二
方式三:
请求体二:
{
"name":"小明",
"age":15,
"teacher":{
"name":"强哥",
"age":"52"
}
}
结果:同测试二
测试完毕
在项目中,发现根本没有写@RequestBody,这又陷入了迷茫,其实是因为重写了WebMvcConfigurer中的方法,具体的可以自己查阅。好吧,是我不会~~~~