Сериализация объектов в XML и JSON
Сериализация ДОЛЖНА поддерживать использование геттеров , а не только полей объекта.
ДОЛЖЕН поддерживать просмотров . Под представлениями я подразумеваю способ указать подмножество свойств объекта, которые должны быть сериализованы. Например, см. Получение частичных ресурсов в Yahoo! API социальной платформы. Я также не хочу, чтобы это повторялось бесконечно глубоко:
Представление должно определять а) свойства, которые должны быть представлены в сущности, и б) представление для каждого из них (если они сами являются сущностями).
Например, у сущности Person
могут быть представления full
и simple
. При запросе simple
представления Person
только свойства id
, firstName
и lastName
будут сериализованы. При запросе представления full
свойства mother
и father
(которые сами по себе Persons
) также будут сериализованы, но только с представлением simple
(таким образом, оно не будет возвращаться бабушке и дедушке).
Сериализация JSON ДОЛЖНА быть "естественной" , то есть иметь смысл в Javascript. Это означает, что мне нужны правильные целые числа, логические и нулевые значения, и мне не нужны дополнительные обертки объектов или что-то, что пытается захватить весь XML Infoset.
Для XML ДОЛЖНО быть возможно настроить сериализацию для использования пустых элементов для сериализации нулей, а не атрибутов xsi:nil="true"
схемы XML.
Кроме того, массивы должны быть сериализованы с использованием вложенных элементов, чтобы можно было различать пустые массивы и свойства, которых нет в данном представлении:
Не определено friends
свойство (отсутствует в представлении):
<person>
</person>
Пустой массив, у человека нет друзей:
<person>
<friends></friends>
</person>
Десериализовать XML и JSON и объединить данные в существующие сущности
Теперь это сложная часть. Следующие два связаны:
Десериализация частичных объектов ДОЛЖНА быть возможной (аналогично представлениям, но какие свойства присутствуют, заранее не определено).
Слияние с существующими свойствами, а не создание новых.
Это немного сложно объяснить. Большинство библиотек десериализуются в объекты Java, но в то время различие между неопределенным свойством и нулевым / пустым свойством (как оно существует в Javascript / JSON, XML, как описано выше, PHP, ...) потеряно.
При получении этого XML:
<person>
<lastName>Bon Jovi</lastName>
<friends></friends>
</person>
и переданный объект Person
, библиотека должна:
person.setLastName("Bon Jovi");
person.setFriends(new ArrayList());
Он не должен касаться сущностей firstName
и / или очищать его, например, father
.
Конечно, со списками это должно быть более сложным. Я хотел бы настроить свойство id, с помощью которого он будет решать, обновлять ли вложенную сущность или создавать новую.
Эти обновления / исправления являются причиной, по которой библиотека НЕ ДОЛЖНА просто возвращать DTO: потому что в это время null
может означать либо «unset», либо «ничего не делать».