我正在使用RestTemplate.postForObject方法将信息发布到Web服务。除了结果字符串外,我需要响应头中的信息。有没有办法获取这个信息?
RestTemplate template = new RestTemplate();
String result = template.postForObject(url, request, String.class);
我正在使用RestTemplate.postForObject方法将信息发布到Web服务。除了结果字符串外,我需要响应头中的信息。有没有办法获取这个信息?
RestTemplate template = new RestTemplate();
String result = template.postForObject(url, request, String.class);
好的,我终于想通了。exchange方法正是我所需要的。它返回一个包含所有头信息的HttpEntity。
RestTemplate template = new RestTemplate();
HttpEntity<String> response = template.exchange(url, HttpMethod.POST, request, String.class);
String resultString = response.getBody();
HttpHeaders headers = response.getHeaders();
最好的做法是使用execute方法,并传入一个ResponseExtractor,它将可以访问到头信息。
private static class StringFromHeadersExtractor implements ResponseExtractor<String> {
public String extractData(ClientHttpResponse response) throws
{
return doSomthingWithHeader(response.getHeaders());
}
}
另一个选项(不太干净的)是扩展 RestTemplate 并覆盖对 doExecute
的调用,在那里添加任何特殊的头处理逻辑。
HttpMessageConverterExtractor
并进行覆盖,而不是编写全新的。 - skaffman 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();