工作解决问题,springboot使用@PutMapping的时候.前端要传进来一个路径变量@PathVariable,以及JSON数据,java后端要如何接收参数

    xiaoxiao2022-07-04  125

    理论上传过来的数据是 { “newPassword”: “123”, “oldPassword”: “123” } 但是如果把controller写成这样的话

    @ApiOperation("修改密码") @PutMapping("/password/{id}") public Account editPassword(@PathVariable(value = "id") Long id, String oldPassword,String newPassword){ return accountService.edit(id,oldPassword,newPassword); }

    前端会报错,用swagger测试的时候发现,看浏览器的请求里面是这样的: 正确的应该是这样的 然后用postman测试的话也会报错.

    观察了对比的差异,发现后台把参数全部拼写在路径里面了.类似get请求那样,查了很多资料都不知道要怎么处理.最后还是从项目中找到了之前的做法,就是把json的两个字段用一个对象来封装起来,然后加上注解@RequestBody就可以了 具体如下:

    @ApiOperation("修改密码") @PutMapping("/password/{id}") public Account editPassword(@ApiParam(value = "用户id", required = true) @PathVariable(value = "id") Long id, @RequestBody AccountPassword accountPassword){ return accountService.edit(id,accountPassword); } //封装类 public class AccountPassword { private String oldPassword; private String newPassword; public String getOldPassword() { return oldPassword; } public void setOldPassword(String oldPassword) { this.oldPassword = oldPassword; } public String getNewPassword() { return newPassword; } public void setNewPassword(String newPassword) { this.newPassword = newPassword; } }

    结论

    要同时传路径变量和json的做法就是: @PathVariable+@RequestBody

    最新回复(0)