Используйте Spring-Data-Rest для возврата ответа в виде XML вместо JSON

Spring-data-rest в настоящее время имеет статус RC1 (выходит на GA 16 июля), но документация все еще немного схематично. До сих пор весь пример кода, который я нашел, показывает ответы по умолчанию в формате JSON, но мне нужен XML, а в идеале либо XML, либо JSON на основе заголовка ACCEPT. Я нашел один источник в некоторых комментариях в ссылке DZone, который указывает, что XML будет поддерживаться. . Но это было опубликовано во время выпуска M2, до RC1. Я тоже ничего не вижу в Задачах по проекту.

Так кто-нибудь знает, как заставить RC1 (или SNAPSHOT) создавать XML вместо или в дополнение к JSON.


person Kevin Welker    schedule 11.07.2012    source источник


Ответы (2)


Хотелось бы, чтобы был простой ответ на создание 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
comment
Кстати, оказалось, что интерфейс JSON пока приемлем. Но вы дали отличный ответ. - person Kevin Welker; 21.07.2012

Что ж, с последней платформой ввода-вывода Spring мы можем добиться этого, а с платформой ввода-вывода нам также не нужно беспокоиться о версии.

Опубликовали, как добиться в другой ссылке переполнения стека, как показано ниже:

REST Spring Boot с поддержкой XML

person Subhasish Sahu    schedule 30.12.2016