Как использовать Spring Resttemplate только с JSON

У меня есть служба отдыха, которая предоставляет информацию в формате XML или JSON. Я подключаю свое приложение к этому сервису с помощью Spring Resttemplate. К сожалению, все мои ответы представлены в формате XML, а не в предпочтительном формате JSON. Мой анализ запросов заключается в том, что Spring Resttemplate отправляет запрос со следующим Accept-Header:

Accept: application/xml, text/xml, application/*+xml, application/json

Мой ответ службы отдыха с первым принятым типом. Это всегда приложение/xml.

Как я могу изменить Accept-Types, чтобы получать только ответы json? Есть ли какие-то свойства для этого в bean-определении RestTemplate?

Я использую для этого Spring 3.1.


person Adrian    schedule 25.04.2012    source источник


Ответы (2)


Вам нужно установить список HttpMessageConverter, доступных для RestTemplate, чтобы переопределить список по умолчанию:

 RestTemplate rest = new RestTemplate();
 rest.setMessageConverters(Arrays.asList(new MappingJacksonHttpMessageConverter()));

Если вы определяете RestTemplate в XML, сделайте то же самое в синтаксисе XML.

person axtavt    schedule 25.04.2012
comment
Я определил оставшийся шаблон следующим образом: ‹bean id=restTemplate class=org.springframework.web.client.RestTemplate› ‹property name=messageConverters› ‹list› ‹bean class=org.springframework.http.converter.json.MappingJacksonHttpMessageConverte‌ ​r/› ‹/list› ‹/property› ‹/bean› Но заголовок Accpet по-прежнему: Accept: application/xml, text/xml, application/*+xml, application/json - person Adrian; 25.04.2012
comment
@adrian: Этого не может быть. Возможно, вы используете другой экземпляр RestTemplate. - person axtavt; 25.04.2012
comment
ты имел право. был еще один bean-компонент resttemplate. извините, ваше решение работает нормально - person Adrian; 25.04.2012
comment
для новых версий это: MappingJackson2HttpMessageConverter.class - person Shilan; 04.03.2019

Не совсем понятно из темы, хотите ли вы использовать только JSON или отправлять. В первом случае (потребление) вы можете аннотировать свой контроллер с помощью

@RequestMapping(value="/path", headers = "Accept=application/json")

В случае создания вы должны для ResponseEntry с contentType:

HttpHeaders headers = new HttpHeaders();
        headers.add("Accept", "application/json");

        ResponseEntity.status(HttpStatus.OK)
                        .contentType(MediaType.APPLICATION_JSON)
                        .headers(headers);
person AlexGera    schedule 12.02.2018