我使用RestTemplate.postForObject将信息发布到Web服务。除了结果字符串之外,我还需要响应头中的信息。有什么办法可以得到这个吗?如何从RestTemplate读取响应标题?
RestTemplate template = new RestTemplate();
String result = template.postForObject(url, request, String.class);
我使用RestTemplate.postForObject将信息发布到Web服务。除了结果字符串之外,我还需要响应头中的信息。有什么办法可以得到这个吗?如何从RestTemplate读取响应标题?
RestTemplate template = new RestTemplate();
String result = template.postForObject(url, request, String.class);
好吧,我终于明白了。交换方法正是我所需要的。它返回一个包含完整标题的HttpEntity。
RestTemplate template = new RestTemplate();
HttpEntity<String> response = template.exchange(url, HttpMethod.POST, request, String.class);
String resultString = response.getBody();
HttpHeaders headers = response.getHeaders();
我不知道这是推荐的方法,但它看起来像如果配置模板使用自定义HttpMessageConverter
你可以从中提取响应标头信息。
要做的最好的事情是使用execute方法,并通过ResponseExtractor,这将有权访问标题。
private static class StringFromHeadersExtractor implements ResponseExtractor<String> {
public String extractData(ClientHttpResponse response) throws
{
return doSomthingWithHeader(response.getHeaders());
}
}
另一种选择(不干净的)是延长RestTemplate并重写呼叫doExecute
并添加任何特殊标头处理逻辑存在。
+1,但可能更好地扩展现有的'HttpMessageConverterExtractor'和超越,而不是写一个全新的一个。 – skaffman 2011-05-15 08:31:23
执行需要一个RequestCallback作为其参数之一。我找不到如何实现它以包含请求主体的示例。 postForObject只需要一个HttpEntity,任何想法? – 2011-05-15 21:22:10
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();
如果您需要状态:ResponseEntity > response = template.exchange(...); response.getStatusCode(); – olafure 2013-11-20 13:05:57
你也可以叫做'postForEntity',这是一个稍微简单一些的方法。 – ayahuasca 2014-04-02 13:14:19
我看到的唯一问题是,template.exchange方法使用restTemplate.getMessageConverters()为您创建HttpMessageConverterExtractor。这可能是也可能不是你想要的。对于大多数情况,您将希望使用此方法并在spring-mvc-servlet.xml中设置消息转换器。 – gaoagong 2014-09-17 17:50:04