【发布时间】:2015-01-12 18:21:06
【问题描述】:
我想序列化一个不受我控制的 POJO 类,但想避免序列化来自超类而不是最终类的任何属性。示例:
public class MyGeneratedRecord extends org.jooq.impl.UpdatableRecordImpl<...>,
example.generated.tables.interfaces.IMyGenerated {
public void setField1(...);
public Integer getField1();
public void setField2(...);
public Integer getField2();
...
}
从例子中你可以猜到这个类是由JOOQ生成的,继承自一个复杂的基类UpdatableRecordImpl,它也有一些类似bean属性的方法,这会导致序列化过程中出现问题。另外,我有几个类似的类,所以最好避免为我生成的所有 POJO 重复相同的解决方案。
到目前为止,我已经找到了以下可能的解决方案:
-
使用 mixin 技术忽略来自超类的特定字段,如下所示:How can I tell jackson to ignore a property for which I don't have control over the source code?
这样做的问题是,如果基类发生变化(例如,其中出现了一个新的 getAnything() 方法),它可能会破坏我的实现。
实现自定义序列化程序并在那里处理问题。这对我来说似乎有点矫枉过正。
顺便说一句,我有一个接口,它准确描述了我想要序列化的属性,也许我可以混合一个 @JsonSerialize(as=IMyGenerated.class) 注释......?我可以将其用于我的目的吗?
但是,从纯设计的角度来看,最好的办法是能够告诉杰克逊我只想序列化最终类的属性,而忽略所有继承的属性。有没有办法做到这一点?
提前致谢。
【问题讨论】:
标签: java inheritance serialization jackson superclass