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 }

浙公网安备 33010602011771号