Как использовать 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