У меня есть общий 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;
}
}
Но это не снимает бремени копирования всех родительских свойств.
Разве нет способа "превзойти" мой объект для сериализации?