一尘不染

使用Jackson进行序列化和反序列化:如何以编程方式忽略字段?

json

我正在使用Jackson来序列化和反序列化对象。问题是有时我想显示一个字段,有时不想要。

实际上,我在使用@JsonIgnore避免在不需要属性时打印该属性。当我需要时,我会通过以下方式禁用该物业

mapper.getSerializationConfig().disable(SerializationConfig.Feature.USE_ANNOTATIONS);

但这也会禁用我需要的其他注释。

如何获得所需的结果?使用视图?有什么例子吗?

一点pojo来了解我想要什么:

class User {
private String username;
@JsonIgnore    
private String password;    
    // getter setter
}


writeToDB() {
mapper.getSerializationConfig().disable(SerializationConfig.Feature.USE_ANNOTATIONS);
mapper.writeValueAsString(user);
}

并通过REST API可以获取不带密码的用户名(感谢JsonIgnore)


阅读 250

收藏
2020-07-27

共1个答案

一尘不染

我认为您应该通过创建可以选择性地序列化/忽略密码的自定义Jackson序列化程序来处理这种问题。

这样的注释在运行时应该被认为是不可变的。有 可能 是一些反映把戏来提取JsonIgnore和设置的值,但是,如果是这样,这将是非常严厉的。

2020-07-27