41

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

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

4 回答 4

68

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

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

String resultString = response.getBody();
HttpHeaders headers = response.getHeaders();
于 2011-05-20T15:56:27.317 回答
9

最好的办法是使用execute方法并传入可以访问标头的ResponseExtractor 。

private static class StringFromHeadersExtractor implements ResponseExtractor<String> {

    public String extractData(ClientHttpResponse response) throws   
    {
        return doSomthingWithHeader(response.getHeaders());
    }
}

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

于 2011-05-15T02:35:07.923 回答
3
  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();
于 2016-11-10T21:24:35.270 回答
1

我不知道这是否是推荐的方法,但如果您将模板配置为使用自定义的HttpMessageConverter.

于 2011-05-15T02:00:22.260 回答