Как сериализовать child как родительский объект в Java - PullRequest
0 голосов
/ 18 февраля 2020

У меня есть общий TransfertObject, который нужно сериализовать между сервером и клиентом. DatabaseObject имеет то же поле + некоторые поля базы данных, определенные c и некоторые аннотации, но известно только на стороне сервера. Я сделал DatabaseObject расширяет TransfertObject, но когда я сериализую его, я не могу десериализовать его на клиенте, потому что java .lang.ClassNotFoundException на DatabaseObject. Как я могу сериализовать мой DatabaseObject как TransfertObject?

public class TransfertObject implements Serializable {
   private String transferredProperties;
}

public class DatabaseObject extends TransfertObject {
   private String dbProperties;
}

Я знаю, что могу сделать dbProperties transient , но это не разрешает исключение ClassNotFoundException

До сих пор единственный найденный мной обходной путь заключался в копировании свойств из одного объекта в другой перед его сериализацией.

public TransfertObject asTransfertObject(DatabaseObject dbObj) {
    TransfertObject transObj = new TransfertObject();
    BeanUtils.copyProperties(dbObj, transObj);
    return transObj;
}

Я думаю, можно было бы сделать то же самое с методом writeReplace

public class DatabaseObject extends TransfertObject {
   private String dbProperties;

   private Object writeReplace() throws ObjectStreamException {
      TransfertObject transObj = new TransfertObject();
      transObj.transferredProperties = this.transferredProperties;
      // copy other properties
      return transObj;
   }
}

Но это не снимает бремени копирования всех родительских свойств.

Разве нет способа "превзойти" мой объект для сериализации?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...