2016-08-24 3 views
0

В моем приложении я должен использовать услугу, предоставляемую сторонним приложением. Ответ они обеспечивают всегда 200 и они меняют тело на основе того, является ли данные доступны или нет или произошла ошибка, как указано нижеКак использовать XML с более чем одним возможным корневым элементом в Spring REST-клиенте

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

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

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

<message> No record found </message> 

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

<error>Invalid Id</error> 

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

+0

Одним из решений может быть обертывание сообщения новым тегом перед разбором сообщения. Что-то вроде ... – reos

ответ

0

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

0

Правильная вещь здесь - попросить третью сторону изменить ответ своей службы на наличие корневого тега. Объект ответа будет выглядеть примерно так:

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

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

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

Смежные вопросы