spring學習之restTemplate的excute,doExcute詳談

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方法。
    整個調用過程如下:
調用者固定類型的方法excutedoExcute1.調用2.包括:get,post,put,delete,options,exchange都調用excute方法3.excute處理URI後調用doExcute4.響應結果5.響應結果6.響應結果1.封裝請求頭和body2.發起請求3.提取響應結果將String類型的url轉爲java.net.URI封裝RequestCallback&ResposneExtractor調用者固定類型的方法excutedoExcute

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對象。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章