restTemplate學習
excute
所有的get、post、delete、put、options、head、exchange(一部分)方法最終調用的都是excute方法
- public T execute(String url, HttpMethod method, @Nullable RequestCallback requestCallback,
@Nullable ResponseExtractor responseExtractor, Object… uriVariables)
- public T execute(String url, HttpMethod method, @Nullable RequestCallback requestCallback,
@Nullable ResponseExtractor responseExtractor, Map<String, ?> uriVariables)
- public T execute(URI url, HttpMethod method, @Nullable RequestCallback requestCallback,
@Nullable ResponseExtractor responseExtractor)
從上面的Excute方法中我們可以看出Excute方法只是將String格式的URI轉成了java.net.URI,之後調用了doExecute方法。
整個調用過程如下:
doExecute
doExecute 方法並沒有暴露出來,只能通過繼承調用
這裏需要了解兩個類: RequestCallback & ResponseExtractor
下面的來自轉載Spring RestTemplate詳解
RequestCallback
用於在ClientHttpRequest上操作的代碼的回調接口。允許操作請求頭,並寫入請求主體。
RequestCallback有兩個實現類,都是內部類
實現類 | 功能 |
---|---|
AcceptHeaderRequestCallback | 只處理請求頭,用於restTemplate.getXXX()方法。 |
HttpEntityRequestCallback | 繼承於AcceptHeaderRequestCallback可以處理請求頭和body,用於restTemplate.putXXX()、restTemplate.postXXX()和restTemplate.exchange()方法。 |
提示:DELETE、HEAD、OPTIONS沒有使用這個接口
ResponseExtractor
restTemplate對此接口的檢索方法實現使用的通用回調接口執行從clienthttpresponse提取數據的實際工作(解析HTTP響應的數據),但不需要擔心異常處理或關閉資源。
RequestCallback有三個實現類
實現類 | 功能 |
---|---|
HeadersExtractor | 用於提取請求頭。 |
HttpMessageConverterExtractor | 用於提取響應body。 |
ResponseEntityResponseExtractor | 使用HttpMessageConverterExtractor提取body(委託模式),然後將body和響應頭、狀態封裝成ResponseEntity對象。 |