jackson:如何防止字段序列化

我有一个密码字段的实体类:

class User { private String password; //setter, getter.. } 

我想在序列化过程中跳过这个字段。 但它应该仍然能够反序列化。 这是必需的,这样客户端可以给我一个新的密码,但不能读取当前的密码。

jackson怎么做到这一点?

您可以将其标记为@JsonIgnore

说明StaxMan的说法,这对我很有用

 @JsonIgnore public String password; @JsonIgnore public String getPassword() { return password; } @JsonProperty public void setPassword(String password) { this.password = password; } 

简单的方法是注释你的getters和setter。

这里是原始示例修改为排除纯文本密码,但是然后注释一个新的方法,只是作为encryption文本返回密码字段。

 class User { private String password; public void setPassword(String password){...} @JsonIgnore public String getPassword(){...} @JsonProperty("password"} public String getEncryptedPassword(){...} } 

除了@JsonIgnore ,还有其他一些可能性:

  • 使用JSON视图有条件地过滤字段(默认情况下,不用于反序列化;在2.0中将可用,但可以在序列化,反序列化中使用不同的视图)
  • 类的@JsonIgnoreProperties可能是有用的

transient是我的解决scheme。 谢谢! 它是Java原生的,避免了添加另一个特定于框架的注释。

你应该问为什么你会想要一个公共的getter方法的密码。 Hibernate或任何其他的ORM框架,将采用私有的getter方法。 为了检查密码是否正确,可以使用

 public boolean checkPassword(String password){ return this.password.equals(anyHashingMethod(password)); }