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)); }
- 使用Jackson将JSON反序列化为ArrayList <POJO>
- 序列化与jackson(JSON) – 得到“没有串行器发现”?
- 杰森JSON反序列化与根元素
- 我应该如何在我的RESTful JAX-RS Web服务中logging未捕获的exception?
- Spring 4.2.3和fasterxml Jackson 2.7.0是不兼容的
- 如何使用JsonCreator重载构造函数反序列化一个类
- 什么时候使用@JsonProperty属性,它用于什么?
- 将JSONstring转换为使用Jackson的漂亮打印JSON输出
- 为什么当一个构造函数用@JsonCreator注解时,它的参数必须用@JsonProperty注解?