我有一个User实体,如下所示:
public class User implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Integer id;
@Column(name = "name")
private String name;
@Column(name = "age")
private Integer age;
@NotNull
@Size(min = 5, max = 50)
@Pattern(regexp = RegexConstants.EMAIL_REGEX, message = ValidationMessages.EMAIL_VALIDATION_MESSAGE)
@Column(name = "email", unique = true)
private String email;
@NotNull
@Size(min = 5, max = 50)
@Column(name = "password")
private String password;
@NotNull
@Size(min = 5, max = 50)
@Column(name = "country_code")
private String countryCode;
/* Getters and Setters */
}
我想只更新用户的国家/地区代码。
我想使用 PUT 请求,因为这似乎是一个合适的选择(不要因为在这里使用适当的词而讨厌我,我可能错了)但是在请求体中发送用户似乎是一种过度杀戮,因为我不打算更新除国家代码之外的任何内容。
当我提出请求时,我实际上甚至没有整个用户。用户正文(@RequestBody user)
仅包含name
和country code
。
因此,基于我读过的有关PUT请求的内容,我需要在请求中发送完整的用户对象,而我还没有。现在我可以通过简单地在URL中传递国家代码来实现这一点,但我在RESTful Web服务上阅读的所有文章都建议不要这样做。
当前代码:
@RequestMapping(value = "/user/{id}", method = RequestMethod.PUT)
public ResponseEntity<User> updateUser(@PathVariable("id") long id, @RequestBody User user) {
System.out.println("Updating User " + id);
User currentUser = userService.findById(id);
if (currentUser==null) {
System.out.println("User with id " + id + " not found");
return new ResponseEntity<User>(HttpStatus.NOT_FOUND);
}
currentUser.setCountryCode(user.getCountryCode);
userService.updateUser(currentUser);
return new ResponseEntity<User>(currentUser, HttpStatus.OK);
}
如果有人能指导正确的方法,我真的很感激。我已经阅读了有关PATCH请求的内容,但我不确定这是否适合我的情况。 如果我做错了,如果你也可以提供一个例子,或者给我一个关于如何以正确的格式采取这个的起点,这将非常有用。