Как мне прочитать заголовок ответа от RestTemplate? - PullRequest
29 голосов
/ 15 мая 2011

Я отправляю информацию в веб-сервис, используя RestTemplate.postForObject. Помимо строки результата мне нужна информация в заголовке ответа. Есть ли способ получить это?

RestTemplate template = new RestTemplate();
String result = template.postForObject(url, request, String.class);

Ответы [ 4 ]

48 голосов
/ 20 мая 2011

Хорошо, я наконец понял это. Метод обмена именно то, что мне нужно. Возвращает HttpEntity, который содержит полные заголовки.

RestTemplate template = new RestTemplate();
HttpEntity<String> response = template.exchange(url, HttpMethod.POST, request, String.class);

String resultString = response.getBody();
HttpHeaders headers = response.getHeaders();
8 голосов
/ 15 мая 2011

Лучше всего использовать метод execute и передать ResponseExtractor , который будет иметь доступ к заголовкам.

private static class StringFromHeadersExtractor implements ResponseExtractor<String> {

    public String extractData(ClientHttpResponse response) throws   
    {
        return doSomthingWithHeader(response.getHeaders());
    }
}

Другой вариант(менее чисто) - расширить RestTemplate и переопределить вызов на doExecute и добавить туда любую специальную логику обработки заголовков.

1 голос
/ 15 мая 2011

Я не знаю, является ли это рекомендуемым методом, но похоже, что вы могли бы извлечь информацию из заголовков ответов, если настроили шаблон для использования пользовательского HttpMessageConverter.

0 голосов
/ 11 ноября 2016
  HttpEntity<?> entity = new HttpEntity<>( postObject, headers ); // for request
    HttpEntity<String> response = template.exchange(url, HttpMethod.POST, entity, String.class);
    String result= response.getBody();
    HttpHeaders headers = response.getHeaders();
...