如何在Spring Boot响应控件中删除对象的某些字段?

时间:2019-03-14 15:48:16

标签: spring-boot

这是我的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
}

我要删除passwordtoken字段,我该怎么办?

我知道两种困难的方法:

  • 创建一个新的哈希图

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

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

有更好的解决方案吗?

2 个答案:

答案 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,其中除passwordtoken之外的所有字段都设为返回类。当然,这涉及创建和填充对象,但是您可以使User类保持干净,没有Jackson注释,并使模型与表示脱钩。

答案 1 :(得分:0)

保留 getter 和 setter,但添加 <preference name="scheme" value="app" /> <preference name="hostname" value="localhost" /> WRITE_ONLY。这样,当您使用实体作为请求正文时,密码验证将起作用。

JsonProperty