在序列化期间仅使用@JsonIgnore,但不使用反序列化

2022-08-31 04:37:04

我有一个发送到服务器和从服务器发送的用户对象。当我发出用户对象时,我不想将散列密码发送到客户端。因此,我添加了 password 属性,但这也阻止了它被反序列化为密码,这使得在用户没有密码时很难注册用户。@JsonIgnore

如何只能应用于序列化而不应用于反序列化?我正在使用Spring JSONView,所以我对.@JsonIgnoreObjectMapper

我尝试过的事情:

  1. 添加到属性@JsonIgnore
  2. 仅添加 getter 方法@JsonIgnore

答案 1

究竟如何执行此操作取决于您使用的杰克逊版本。这在1.9版本左右发生了变化,在此之前,您可以通过添加到getter来执行此操作。@JsonIgnore

您尝试过:

仅在 getter 方法上添加@JsonIgnore

执行此操作,并将 JSON“密码”字段名称的特定注释添加到对象上密码的 setter 方法中。@JsonProperty

Jackson 的更新版本为 添加了和注释参数。所以你也可以做这样的事情:READ_ONLYWRITE_ONLYJsonProperty

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

文档可以在这里找到。


答案 2

为了实现这一点,我们只需要两个注释:

  1. @JsonIgnore
  2. @JsonProperty

用于类成员及其获取器,以及其 setter。示例插图将有助于实现此目的:@JsonIgnore@JsonProperty

class User {

    // More fields here
    @JsonIgnore
    private String password;

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

    @JsonProperty
    public void setPassword(final String password) {
        this.password = password;
    }
}