后端接收数据测试解析

前言:
在项目中总是看到使用@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中的方法,具体的可以自己查阅。好吧,是我不会~~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值