我想序列化一个不在我的控制下的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技术忽略来自超类的特定字段,例如:如何告诉jackson忽略我无法控制源代码的属性?。但问题在于,如果基类发生更改(例如,其中出现一个新的getAnything()方法),它可能会破坏我的实现。 - 实现自定义序列化程序并在那里处理问题。对我来说,这似乎有点过度。 - 偶然地,我有一个描述我想要序列化的属性的接口,也许我可以混合使用@JsonSerialize(as=IMyGenerated.class)注释...?我能用这个来达到我的目的吗?
但是,从纯设计角度来看,最好的方式是告诉jackson我只想序列化最终类的属性,而忽略所有继承的属性。有没有办法做到这一点?
提前致谢。
hasIgnoreMarker
实现是这样的:return m.getDeclaringClass().getName().contains("org.jooq") || super.hasIgnoreMarker(m)
。 - Nathan