Spring Boot 注解@RequestParam和@RequestBody详情与区别
@RequestBody测试详情(GET与POST)
POST测试
代码示例
@ApiOperation(value = "")
@PostMapping("/test")
public DemoTest test(@RequestBody DemoTest demoTest) {
return demoTest;
}
Postman测试结果
1.请求方式POST,参数在请求体里
2.请求方式POST,请求参数放在URL问号后面,结果如下:
如图出现错误,证明对于POST(@RequestBody)参数不能放在问号后面
GET测试
代码示例
@ApiOperation(value = "")
@GetMapping("/test1")
public DemoTest test1(@RequestBody DemoTest demoTest) {
System.out.println("content:>>>>" + demoTest);
return demoTest;
}
Postman测试结果
1.请求方式GET,请求参数放在URL问号后面,结果如下:
如图出现错误,证明对于GET(@RequestBody)参数不能放在问号后面
2.请求方式GET,参数在请求体里,结果如下:
如图结果,证明对于GET(@RequestBody)参数可以放在请求体里
总结:对于@RequestBody无论是POST还是GET请求参数只能放在请求体里面,当请求方式为GET(@RequestBody)时,请求参数放在请求体里,服务端也能拿到参数
另:
@ApiOperation(value = "")
@PostMapping("/test")
public DemoTest test(@RequestBody() String content) {
System.out.println("content:>>>>" + content);
DemoTest demoTest = new DemoTest(content);
return demoTest;
}
上面代码参数放在body也能取到
@RequestParam测试详情(GET与POST)
POST测试
代码示例
@ApiOperation(value = "")
@PostMapping("/test")
public DemoTest test(@RequestParam DemoTest demoTest) {
System.out.println("content:>>>>" + demoTest);
return demoTest;
}
经postman测试上面代码错误,@RequestParam不支持pojo类。修改代码:
@ApiOperation(value = "")
@PostMapping("/test")
public DemoTest test(@RequestParam String content) {
System.out.println("content:>>>>" + content);
DemoTest demoTest = new DemoTest(content);
return demoTest;
}
参数放到问号后面,能取到值:
参数放body里,格式为form-data也能取到:
如果格式为raw报错Required String parameter ‘content’ is not present
GET测试
代码示例
@ApiOperation(value = "")
@GetMapping("/test1")
public DemoTest test1(@RequestParam() String content) {
System.out.println("content:>>>>" + content);
DemoTest demoTest = new DemoTest(content);
return demoTest;
}
参数放到问号后面,能取到值;参数放body里,格式为form-data不能取到值,格式为raw也不能
总结:@RequestParam放在问号后面,无论GET还是POST都能取到值;当POST放在body里格式为form-data也能取到值,其他(raw等)取不到,而为GET放到body都取不到值
把参数放到header里@RequestParam无论GET还是POST都取不到值