Как заставить BlazeDS игнорировать свойства?
У меня есть Java-класс, который имеет одно поле с getter и setter, а вторая пара getter и setter, которые получают доступ к этому полю по-другому:
public class NullAbleId {
private static final int NULL_ID = -1;
private int internalId;
getter & setter for internalId
public Integer getId() {
if(this.internalId == NULL_ID) {
return null;
} else {
return Integer.valueOf(internalId);
}
}
public void setId(Integer id) {
if (id == null) {
this.internalId = NULL_ID;
} else {
this.internalId = id.intValue();
}
}
}
(причина этой конструкции в том, что я хочу создать способ обнулять Nullable Intergers)
На стороне клиента Flash/Flex у меня есть класс с двумя свойствами: id и internalId (свойства id предназначены только для тестирования, в конце они должны возвращать значение internalId)
BlazeDS соединяется для передачи обоих значений: id и internalId, потому что оба имеют полную пару установщиков геттеров. Я хочу, чтобы Blaze не передавал id, должен передаваться только internalId. Но я понятия не имею, как мне это настроить.
3 ответа
Помимо transient / marshaller вы можете реализовать интерфейс Externalizable и создать свою собственную сериализацию.
Смотрите правила сериализации
Все правила для сериализации BlazeDS здесь:
http://livedocs.adobe.com/blazeds/1/blazeds_devguide/help.html?content=serialize_data_3.html
Вот цитата: "Поля, которые являются статическими, временными или непубличными, а также свойства бинов, которые являются непубличными или статическими, исключаются".
Так что если вы можете сделать свое свойство id соответствующим этим критериям, оно будет исключено. Другой вариант - создать собственный сериализатор, который явно не включает ваше свойство id.
Всего наилучшего,
~ Харриса
Возможно, он немного староват, но в некоторых это может помочь: есть хороший билет об исключении свойств из Java во Flex через BlazeDS
РЕДАКТИРОВАТЬ: лучшее решение, это использовать @AmfIgnore
(или же @AmfIgnoreField
если ваша сериализация находится прямо на полях) аннотация присутствует в spring-flex-core.jar (я использовал 1.5.2-RELEASE)