Как прочитать заголовок ответа из RestTemplate?
Я отправляю информацию в веб-службу, используя RestTemplate.postForObject. Помимо строки результата мне нужна информация в заголовке ответа. Есть ли способ получить это?
RestTemplate template = new RestTemplate();
String result = template.postForObject(url, request, String.class);
Ответы
Ответ 1
Хорошо, я, наконец, понял это. Метод обмена - именно то, что мне нужно. Он возвращает HttpEntity, который содержит полные заголовки.
RestTemplate template = new RestTemplate();
HttpEntity<String> response = template.exchange(url, HttpMethod.POST, request, String.class);
String resultString = response.getBody();
HttpHeaders headers = response.getHeaders();
Ответ 2
Лучше всего использовать метод execute и передать ResponseExtractor который будет иметь доступ к заголовкам.
private static class StringFromHeadersExtractor implements ResponseExtractor<String> {
public String extractData(ClientHttpResponse response) throws
{
return doSomthingWithHeader(response.getHeaders());
}
}
Другой вариант (менее чистый) - это расширение RestTemplate и переопределение вызова на doExecute
и добавление туда любой специальной логики обработки заголовков.
Ответ 3
Я не знаю, является ли это рекомендуемым методом, но похоже, что вы можете извлекать информацию из заголовков ответов, если вы настраиваете шаблон для использования пользовательского HttpMessageConverter
.
Ответ 4
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();