Сериализация Джексона: как игнорировать свойства суперкласса
Я хочу сериализовать класс 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, например:Как я могу сказать Джексону игнорировать свойство, для которого у меня нет контроля над исходным кодом?
Проблема в том, что если базовый класс изменяется (например, в нем появляется новый метод getAnything ()), это может нарушить мою реализацию.
реализовать собственный сериализатор и решить проблему там. Это кажется немного излишним для меня.
кстати, у меня есть интерфейс, который точно описывает свойства, которые я хочу сериализовать, может быть, я могу смешать аннотацию @JsonSerialize (as = IMyGenerated.class) ...? Могу ли я использовать это для своих целей?
Но, с точки зрения чистого дизайна, лучше всего было бы сказать Джексону, что я хочу сериализовать только свойства конечного класса и игнорировать все унаследованные. Есть способ сделать это?
Заранее спасибо.