Как заставить 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)

Другие вопросы по тегам