1.@RequestParam与@PathVariable以及@PathParam的区别
@GetMapping("/data/reqparam/{id}")
// @RequestParam 可以设置参数是否为必须传,以及默认值
// URL:xxxx/shop/data/reqparam/1?id=2
public String dataTest(@RequestParam(value="id",defaultValue = "2",required = true) String id) {
return id;
}
@GetMapping("/data/pathparam/{param}")
// 获取参数同@RequestParam
// URL:xxxx/shop/data/pathparam/1?param=2
public String dateTest3(@PathParam(value="param") String param) {
return param;
}
@GetMapping("/data/pathvar/{name}")
// URL:xxxx/shop/data/pathvar/1
public String dateTest2(@PathVariable(value="name",required = true) String name) {
return name;
}
2.@RequestBody获取参数
参考文章:https://juejin.im/post/5b5efff0e51d45198469acea
2.1使用@RequestBody的时候,api的接口大多是post方式,这时候处理的headers中content-type,不是默认的application/x-www-form-urlencoded请求方式,而是application/json或者是application/xml等请求方式。
当使用application/x-www-form-urlencoded时:
Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported
其实想用这个参数的本意是,想用一个Map<String,Object>接收前台传过来的所有数据。
@PostMapping("/date/all")
public String getAllDate(@RequestBody Map<String, Object> map) {
return "success";
}
这里使用强大的postman来进行测试
对应控制台在debug模式下的参数为:
这里可以看到,用Map接收到了前台传给后台的所有数据,再对我们想要处理的数据进行处理。
2.2当然,我们也可以直接用一个DTO类(面向对象的思想,本人习惯将前后台进行传输的数据封装成DTO类,方便数据的传输,以及减少数据的冗余)来接收前台传给我们的数据。
@RequestMapping(value = "/data/dto/all",method = {RequestMethod.POST,RequestMethod.GET})
public String getDTOAll(ReqDTO reqDTO) {
return "success";
}
这里以GET/POST方式都能获取到前台传到后台的参数(注意:如果前台传了DTO独享中不存在的成员,则后台接收不到该数据)。
GET方式:
POST方式
这里需要注意,当使用POST方式的时候headers的content-type的请求方式,和@RequestBody的不同,这里要使用:
application/x-www-from-urlencoded请求方式。
写的不好,希望能帮助大家,有什么问题还望大家多多指出。