2013-09-12 4 views
2

Я использую Fasterxml Джексон 2.2.2Fasterxml Джексон примитивные логические сериализации

У меня есть простой POJO с (примитивным) атрибутом boolean. Когда по умолчанию BeanSerializer и BeanPropertyWritter попытаются его сериализовать, этот атрибут пропускается, когда его значение равно false.

Я хочу:

{"id":1, "enabled":false} 

Что я получаю:

{"id":1} 

Код в BeanPropertyWritter является:

// and then see if we must suppress certain values (default, empty) 
    if (_suppressableValue != null) { 
     if (MARKER_FOR_EMPTY == _suppressableValue) { 
      if (ser.isEmpty(value)) { 
       return; 
      } 
     } else if (_suppressableValue.equals(value)) { 
      return; 
     } 
    } 

Я отлажена его и обнаружил, что BeanPropertyWritter._suppressableValue равна Boolean(false) , поэтому, когда к этому блоку приходит ложное логическое значение, оно просто возвращается и нет выход возвращается.

Какие у меня варианты? Могу ли я настроить создателя атрибута для отмены его _suppressableValue? Что было бы самым простым и простым решением?

+0

Это действительно странно. Он должен работать. Не могли бы вы показать свой класс сущности и как вы сериализуете этот объект? Для меня это работает. My entity: class 'Entity {private long id; private boolean enabled; getters/setters} 'и smy serialize code:' new ObjectMapper(). writeValueAsString (entity) ' –

+2

Включено ли в ваше поле включенное значение 'JsonSerialize.Inclusion.NON_DEFAULT'? – HiJon89

ответ

1

Как было предложено, ваши настройки ObjectMapper, вероятно, не являются стандартными, и укажите стратегию включения NON_DEFAULT.

Но вы можете добавить @JsonInclude, чтобы переопределить это или на свой класс POJO, или даже для самого логического свойства: обязательно используйте Inclusion.ALWAYS.

Смежные вопросы