如何将JsonIgnoreProperties与超类合并?

时间:2018-11-09 12:14:51

标签: java json jackson

我有两节课:

@JsonIgnoreProperties(values="foo", allowGetters = true)
public class Parent {
  String foo;
  String bar;
}

@JsonIgnoreProperties(values="alice", allowGetters = true)
public class Child extends Parent {
  String alice;
  String bob;
}

这将导致一个类Child,其中属性foo不会被忽略(用于设置)。因此,我假设JsonIgnoreProperties中的Child会覆盖JsonIgnoreProperties中的Parent

但是我需要一种方法来合并JsonIgnoreProperties的{​​{1}}和Child的{​​{1}}。这该怎么做? TIA!

2 个答案:

答案 0 :(得分:1)

由于您已经在Child类中重新定义了注释,因此它将覆盖Parent中定义的注释。

我知道有两种解决方法,但这两种方法都不是直接的。

  1. 在Child类中,不要在要忽略的属性的Getter上使用@JsonIgnoreProperties,而要使用@JsonIgnore。这样可以确保您不会覆盖父级注释。
  2. 如果您仍然想使用@JsonIgnoreProperties,请添加自定义JsonFilter并在运行时( Reflections )中手动处理注释解析,方法是查看是否存在任何层次结构父类具有JsonIgnoreProperties,然后跳过分配。

答案 1 :(得分:0)

我通过自定义BeanDeserializerModifier解决了这个问题。

请参阅此处:Jackson Dynamic filtering of properties during deserialization