SpringBoot中的@PathVariable、@RequestParam、@RequestBody注解

1、@PathVariable

通过 @PathVariable 可以将 URL 中占位符参数绑定到控制器处理方法的入参中:URL 中的 {xxx} 占位符可以通过@PathVariable("xxx") 绑定到操作方法的入参中。

1 @GetMapping("/{modelId}")
2 @ApiOperation("根据设备型号ID获取设备型号详细信息")
3 public ResponseEntity<DeviceModel> findDeviceModel(@PathVariable("modelId") String modelId) {
4         return ResponseEntity.ok(deviceModelService.findById(modelId));
5     }

上面这个接口可通过get请求 http://xxxxx/1111来得到想要的数据,1111既是findDeviceModel的方法参数又是@RequestMapping的路由。如果方法参数不想写成和路由一样的应该怎么办?看代码:

1 @GetMapping("/{deviceModelId}")
2 @ApiOperation("根据设备型号ID获取设备型号详细信息")
3 public ResponseEntity<DeviceModel> findDeviceModel(@PathVariable("deviceModelId") String modelId) {
4         return ResponseEntity.ok(deviceModelService.findById(modelId));
5     } 

2、@RequestParam

@RequestParam和@PathVariable的区别就在于请求时当前参数是在url路由上还是在请求的body上,例如有下面一段代码:

1 @GetMapping("/list")
2 @ApiOperation("查询设备型号列表")
3 public ResponseEntity findDeviceModelList(DeviceModel deviceModel, @RequestParam(value="pageSize", required=true, defaultValue="10") Integer pageSize, @RequestParam(value="pageNum", required=true, defaultValue="1") Integer pageNum) {
4         return ResponseEntity.ok(deviceModelService.query(deviceModel, pageSize, pageNum));
5     }

这个接口的请求url这样写:http://xxxxx?phoneNum=xxxxxx,也就是说被@RequestParam修饰的参数最后通过key=value的形式放在http请求的Body传过来,对比下上面的@PathVariable就很容易看出两者的区别了。

3、@RequestBody

@RequestBody能把简单json结构参数转换成实体类,如下代码:

1 @PostMapping("/add")
2 @ApiOperation("新增设备型号")
3 public ResponseEntity<?> create(@RequestBody DeviceModel deviceModel) {
4         if(deviceModelService.isExistDeviceModelName(deviceModel)){
5             throw new IndustryException("设备型号名称重复");
6         }
7         return ResponseEntity.ok(deviceModelService.create(deviceModel));
8     }        

 

posted @ 2020-10-21 14:10  小熊公子  阅读(564)  评论(0)    收藏  举报