这是我的REST控制器之一,
@RestController
@RequestMapping("/users/Ache")
public class Users {
@GetMapping
public User getUser() {
User user = new User();
return user;
}
}
作为响应,Spring Boot会将我的Object转换为JSON, 这是回应:
{
"username": "Ache",
"password": "eee",
"token": "W0wpuLAUQCwIH1r2ab85gWdJOiy2cp",
"email": null,
"birthday": null,
"createDatetime": "2019-03-15T01:39:11.000+0000",
"updateDatetime": null,
"phoneNumber": null
}
我要删除password
和token
字段,我该怎么办?
我知道两种困难的方法:
创建一个新的哈希图
并添加一些必要的字段,但是太复杂了
将这两个字段设置为空
但它仍然留下两个空值字段,这太难看了。
有更好的解决方案吗?
答案 0 :(得分:0)
想到的最简单的解决方案是使用Jackson的@JsonIgnore。默认情况下,Spring利用Jackson库进行JSON编组。
例如,在一个假设的User类中:
@JsonIgnore
private String password;
@JsonIgnore
private String token;
请记住,@JsonIgnore
在反序列化时(例如,当客户端执行POST请求时)也将忽略属性。如果要保留字段并仅在序列化时忽略,则使用@JsonProperty(access = Access.WRITE_ONLY)
或仅在getter上使用它:
@JsonIgnore
public String getPassword() {
return this.password;
}
另一种解决方案是创建另一个类,例如UserResponse
,其中除password
和token
之外的所有字段都设为返回类。当然,这涉及创建和填充对象,但是您可以使User
类保持干净,没有Jackson注释,并使模型与表示脱钩。
答案 1 :(得分:0)
保留 getter 和 setter,但添加 <preference name="scheme" value="app" />
<preference name="hostname" value="localhost" />
WRITE_ONLY
。这样,当您使用实体作为请求正文时,密码验证将起作用。
JsonProperty