【发布时间】:2016-01-28 21:18:03
【问题描述】:
我正在使用 jackson 来处理 JSON(反)序列化。我有一堆带有注释的类,它们本质上是持有属性和关联的 getter 和 setter 的对象。
但是,我经常发现在某些时候我想添加我不想包含在(反)序列化过程中的其他属性。这确实可以使用@JsonIgnore,但它让我觉得相对难看,因为我必须在任何地方添加注释并且一旦我忘记事情就会崩溃。
我想知道是否有更好的方法来分离被忽略的和序列化的属性。我有以下两个想法:
-
使用继承,将new属性添加到继承的
class:// everything here should be (de)-serialized class Base { public int getJSONProperty() {...} } // nothing specific to the class Derived should be (de)-serialized class Derived extends Base { // *not* to be included public SomeClass getAdditionalProperty() {...} }但是,我不知道如何告诉杰克逊反序列化
Derived对象为Bases。这可能吗(杰克逊是否做出保证 关于类的(非)多态序列化)? 使用MixIn annotations。这将需要一个额外的摘要 每个现有类的类。我也不确定这是否解决了 问题。是没有出现在 MixIn 基类中的 getter 自动忽略还是我需要手动
@JsonIgnore他们?
【问题讨论】:
-
@JsonIgnoreProperties(ignoreUnknown=true)怎么样?这将有效地反序列化仅存在于带有 json 注释@JsonProperty的类中的属性。在您的情况下,如果类成员值private SomeClass additionalProperty没有@JsonProperty("additionalProperty")注释,则根本不应该序列化。 -
好吧,我也想在不同的位置(又名文件)拥有不同的属性......除此之外,我想它会起作用