序列化时只使用@JsonIgnore,反序列化时不使用

新手上路,请多包涵

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

我怎样才能只得到 @JsonIgnore 申请序列化而不申请反序列化?我正在使用 Spring JSONView,所以我对 ObjectMapper 没有太多的控制权。

我尝试过的事情:

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

原文由 chubbsondubs 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

具体如何执行此操作取决于您使用的 Jackson 版本。这在 1.9 版左右发生了变化,在此之前,您可以通过将 @JsonIgnore 添加到 getter 来完成此操作。

你试过的:

仅在 getter 方法上添加 @JsonIgnore

执行此操作, 为您的 JSON“密码”字段名称添加一个特定的 @JsonProperty 注释到对象密码的 setter 方法。

Jackson 的更新版本添加了 READ_ONLYWRITE_ONLY 注释参数 JsonProperty 。所以你也可以这样做:

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

可以在 此处 找到文档。

原文由 pb2q 发布,翻译遵循 CC BY-SA 4.0 许可协议

为了完成这个,我们只需要两个注释:

  1. @JsonIgnore
  2. @JsonProperty

在类成员及其获取器上使用 @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;
    }
}

原文由 Balaji Boggaram Ramanarayan 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题