Хотелось бы, чтобы был простой ответ на создание XML в Spring Data REST, но я его еще не нашел. По умолчанию мы использовали JSON, потому что решили, что это очень простой и легкий «протокол» для передачи объектов, который будет работать достаточно хорошо в большинстве случаев.
Есть несколько проблем с XML, для которых мы не нашли разумных ответов:
- Как представить объект в XML? Использовать ли имя свойства в качестве имени элемента или использовать стандартное имя элемента и поместить имя свойства в атрибут?
- Где я могу определить тип свойства (будь то сложное или простое, Long, BigInteger или что у вас есть)?
- Должен ли я отказаться от всей пользовательской информации о сопоставлении и просто использовать JAXB или Spring OXM?
- Что делать со ссылками? Использую ли я элемент ссылки пространства имен Atom?
- Если я уже использую Atom, то почему бы не использовать представление Atom для всего?
Поскольку ответы на эти вопросы обязательно потребуют большего вклада сообщества, чем у нас было до сих пор, поскольку проект такой новый, я подумал, что мы подождем до версии после 1.0, чтобы добавить поддержку XML. Очевидно, что приоритеты могут измениться, если будет достаточно импульса в этом направлении, но я просто не вижу, чтобы это произошло на следующей неделе.
Существует некоторый механизм, который вы можете переопределить (в конце концов, это всего лишь приложение Spring MVC), чтобы получить любой ответ, который вы хотите. Если вы используете последний снимок и переопределяете метод RepositoryRestMvcConfiguration.contentNegotiatingViewResolver()
, вы можете обеспечить совершенно другое представление DTO, выходящего из экспортер. Об этом упоминается в вики. Вам нужно будет проверить исходный код JsonView
, чтобы получить необходимые сведения о том, как DTO выглядит внутри, но было бы относительно легко заменить JsonView
на MyOwnXmlView
.
ПРИМЕЧАНИЕ. Это будет работать только для текущей версии экспортера REST. Версия GA будет иметь другой механизм для рендеринга вывода. Тем не менее, я предоставлю хуки для выполнения любых типов вывода вывода, поэтому вы сможете переопределить вывод рендеринга, установив свойство в конфигурации. Если вы создадите подкласс View
для этой версии, скорее всего, это будет вопрос изменения его на HttpMessageConverter
для версии GA.
person
Jon Brisbin
schedule
11.07.2012