我使用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