【发布时间】:2017-12-26 19:26:46
【问题描述】:
当通过 REST 更新资源时,应该在正文中只包含要更新的值还是整个对象(当前值和要更新的值)?
如果一个用户对象看起来像这样
User (id, name, age, sex)
如果我的请求如下所示,我想只更新他的姓名和年龄:
PUT /users/1
{"name":"john","age":18}
或者像这样:
PUT /users/1
{"name":"john","age":18, "sex":"m"}
那在服务器端应该是什么样子?
@RequestMapping(value = "/{userId}", method = PUT, consumes = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<String> updateUser(@PathVariable final int userId, @RequestBody User u){
//fetch user by ID
user.setName(u.getName())
user.setAge(u.getAge())
user.setSex(u.getSex()) //this will be empty?
return new ResponseEntity<String>(gson.toJson(user), HttpStatus.OK);
}
或者,我可以找出请求正文中未包含哪些变量并执行类似的操作
if(u.getName()!=null){
user.setName(u.getName())
}
if(u.getAge()!=null){
user.setAge(u.getAge())
}
if(u.getSex()!=null){
user.setSex(u.getSex())
}
是否有正确/错误的方法来实现这一点,或者只是做最简单的事情?
【问题讨论】:
标签: rest http post spring-boot put