Я хочу сериализовать класс 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)...? Могу ли я использовать это для своей цели?
Но, с чистой точки зрения дизайна, лучше всего было бы сказать Джексону, что я хочу сериализовать только свойства последнего класса и игнорировать все унаследованные. Есть ли способ сделать это?
Спасибо заранее.