Spring boot 如何删除Spring引导响应控件中对象的某些字段?

Spring boot 如何删除Spring引导响应控件中对象的某些字段?,spring-boot,Spring Boot,这是我的一个休息控制器 @RestController @请求映射(“/users/Ache”) 公共类用户{ @GetMapping 公共用户getUser(){ 用户=新用户(); 返回用户; } } 作为响应,Spring boot将把我的对象转换为JSON, 以下是回应: { "username": "Ache", "password": "eee", "token": "W0wpuLAUQCwIH1r2ab85gWdJOiy2cp", "email":

这是我的一个休息控制器

@RestController
@请求映射(“/users/Ache”)
公共类用户{
@GetMapping
公共用户getUser(){
用户=新用户();
返回用户;
}
}
作为响应,Spring boot将把我的对象转换为JSON, 以下是回应:

{
    "username": "Ache",
    "password": "eee",
    "token": "W0wpuLAUQCwIH1r2ab85gWdJOiy2cp",
    "email": null,
    "birthday": null,
    "createDatetime": "2019-03-15T01:39:11.000+0000",
    "updateDatetime": null,
    "phoneNumber": null
}
我想删除
密码
令牌
字段,怎么办

我知道两条艰难的道路:

  • 创建一个新的哈希映射

    并添加一些必要的字段,但它太复杂了

  • 将这两个字段设置为空
    但它仍然留下两个空值字段,这太难看了


有更好的解决方案吗?

Spring默认情况下利用Jackson库进行JSON编组。想到的最简单的解决方案是使用Jackson的@JsonIgnore,但这会忽略序列化和反序列化的属性。因此,正确的方法是使用
@JsonProperty(access=access.WRITE_ONLY)
注释字段

例如,在假设的用户类中:

@JsonProperty(access = Access.WRITE_ONLY)
private String password;

@JsonProperty(access = Access.WRITE_ONLY)
private String token;
另一种方法是仅在getter上使用
@JsonIgnore

@JsonIgnore
public String getPassword() {
    return this.password;
}

您还可以创建另一个类,例如
UserResponse
,包含除
password
token
之外的所有字段,并将其设置为您的返回类型。当然,它涉及到创建一个对象并填充它,但是你要让你的
用户
类保持干净,不带Jackson注释,并将你的模型与你的表示分离。

保留getter和setter,但只添加
WRITE\u
JsonProperty
。这样,当您使用实体作为请求主体时,密码验证将起作用

@NotBlank
@JsonProperty(access=access.WRITE_仅限)
私有字符串密码;

添加@JsonIgnore时,将忽略请求中的密码well@s1n7ax如果你愿意阅读我的全部答案,你会看到我对此发表了评论,还有一种选择是注释getter。是你当时投票否决了我吗?不过,谢谢你的评论。我编辑了代码片段和解释,以避免混淆和可能的进一步否决:)