如何从RestTemplate读取响应头?

我使用RestTemplate.postForObject将信息发布到Web服务。 除了结果字符串,我还需要响应头中的信息。 有没有办法得到这个?

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

好吧,我终于明白了。 交换方法正是我所需要的。 它返回一个包含完整标题的HttpEntity。

 RestTemplate template = new RestTemplate(); HttpEntity 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 { public String extractData(ClientHttpResponse response) throws { return doSomthingWithHeader(response.getHeaders()); } } 

另一个选项(不太干净)是扩展RestTemplate并覆盖对doExecute的调用,并在那里添加任何特殊的头处理逻辑。

我不知道这是否是推荐的方法,但如果您将模板配置为使用自定义HttpMessageConverter ,则看起来您可以从响应标头中提取信息。

  HttpEntity entity = new HttpEntity<>( postObject, headers ); // for request HttpEntity response = template.exchange(url, HttpMethod.POST, entity, String.class); String result= response.getBody(); HttpHeaders headers = response.getHeaders();