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