Как использовать XML с несколькими возможными корневыми элементами в Spring REST-клиенте

В моем приложении я должен использовать сервис, предоставленный сторонним приложением. Ответ, который они предоставляют, всегда 200, и они меняют тело в зависимости от того, доступны данные или нет, или произошла ошибка, как указано ниже.

Если данные есть, то

<products>
   <product></product>
   <product></product>
</products>

Если данные пусты, то

<message> No record found </message>

Если какая-то проверка не удалась, тогда

<error>Invalid Id</error>

я использую RestTemplate.exchange чтобы воспользоваться услугой, мой вопрос: если существует только один тип корневого элемента, то мы передаем соответствующий класс как ParameterizedTypeReference но здесь, как отобразить ответ и разобрать его.

2 ответа

В этом случае нужно попросить третье лицо изменить свой ответ службы, чтобы иметь корневой тег. Объект ответа будет выглядеть примерно так:

<response>
<products>
   <product></product>
   <product></product>
</products>
<message> No record found </message>
<error>Invalid Id</error>
</response>

При этом вам нужно будет только беспокоиться о response объект, и вы можете проверить наличие соответствующих вложенных тегов.

Другой вариант, чтобы сделать эту работу для вас, это сделать обмен, передав String.class в качестве ссылки на тип. Затем вам нужно будет выполнить проверку в своем коде, чтобы увидеть, является ли возвращенный строковый ответ products или же message или же error

Используйте jaxb или jackson, чтобы разобрать xml.

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