如何从RestTemplate中读取响应头?

Eri*_*las 32 java spring resttemplate

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

RestTemplate template = new RestTemplate();
String result = template.postForObject(url, request, String.class);
Run Code Online (Sandbox Code Playgroud)

Eri*_*las 53

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

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

String resultString = response.getBody();
HttpHeaders headers = response.getHeaders();
Run Code Online (Sandbox Code Playgroud)

  • 您也可以调用'postForEntity',这是一种稍微简单的方法. (5认同)
  • 如果您需要状态:ResponseEntity <?> response = template.exchange(...); response.getStatusCode(); (3认同)

And*_*ite 8

最好的办法是使用execute方法并传入一个ResponseExtractor,它可以访问头文件.

private static class StringFromHeadersExtractor implements ResponseExtractor<String> {

    public String extractData(ClientHttpResponse response) throws   
    {
        return doSomthingWithHeader(response.getHeaders());
    }
}
Run Code Online (Sandbox Code Playgroud)

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