【问题标题】:How to merge JsonIgnoreProperties with superclass?如何将 JsonIgnoreProperties 与超类合并?
【发布时间】:2019-04-13 00:17:52
【问题描述】:

我有两个班级:

@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 不会被忽略(用于设置)。所以我假设JsonIgnorePropertiesChild 覆盖JsonIgnorePropertiesParent

但我需要一种方法来合并JsonIgnorePropertiesChildJsonIgnorePropertiesParent。这个怎么做?蒂亚!

【问题讨论】:

  • 您可以设置ignoreUnknown = true,它将忽略任何或指定多个在父级上使用value = {“alice”,“foo”}
  • @karen 我不想忽略未知,因为我想避免 REST API 的调用者设置一些(现有的)属性。

标签: java json jackson


【解决方案1】:

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

请看这里:Jackson Dynamic filtering of properties during deserialization

【讨论】:

    【解决方案2】:

    由于您在 Child 类中重新定义了注解,它会覆盖 Parent 中定义的注解。

    我知道有两种方法可以解决这个问题,这两种方法都不是直截了当的。

    1. 在 Child 类中,不要使用 @JsonIgnoreProperties,而是在要忽略的属性的 Getter 上使用 @JsonIgnore。这将确保您没有覆盖父注释。
    2. 如果您仍想使用@JsonIgnoreProperties,则添加自定义JsonFilter 并通过查看是否有任何分层父类在运行时(反射)中手动处理注释解析一个 JsonIgnoreProperties 然后跳过分配。

    【讨论】:

    • 谢谢。关于第二点:使用自定义 JsonFilter 是否足够,还是需要客户反序列化器?
    • @t777 自定义 JsonFilter 就足够了。
    猜你喜欢
    • 1970-01-01
    • 2017-01-10
    • 1970-01-01
    • 2018-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-07
    相关资源
    最近更新 更多