Spring Boot調用Http接口的簡單方法
前言
在項目開發(fā)中,后端會經常去請求一些已經開發(fā)好的服務接口獲取數據。直接使用okhttp、httpClient發(fā)起http請求,既繁瑣又不方便統(tǒng)一管理。在這里推薦一個適用于Spring Boot項目的輕量級HTTP客戶端框架retrofit,使用非常簡單方便。retrofit是一款類型安全的HTTP客戶端,其最大的特性的是支持通過接口的方式發(fā)起HTTP請求 。
準備
使用前期講到的Spring Boot可視化接口開發(fā)工具magic-api部署兩個http服務接口,不知道可視化接口開發(fā)工具的可以翻看前期的文章,這里不再過多說明。
get接口
post接口
retrofit開發(fā)
引入依賴
配置文件
編寫參數實體
根據接口的輸入參數編寫相關實體,代碼略!
http接口定義
使用
調用服務
控制臺輸出:
控制臺輸出:
大功告成,是不是很簡單?
常用注解說明
方法注解
@GET | GET請求 |
@POST | POST請求 |
@HTTP | 作用于方法,用于發(fā)送一個 自定義的HTTP請求 |
標記注解
@FormUrlEncoded:
請求體是 From 表單 @POST比起@GET多了一個@FromUrlEncoded的注解。
@Multipart:
請求體是支持文件上傳的 From 表單
@Streaming:
響應體的數據用流的形式返回,未使用該注解,默認會把數據全部載入內存,之后通過流獲取數據也是讀取內存中數據,所以返回數據較大時,需要使用該注解。
參數注解
@Query:
用于Get請求數據,用于拼接在拼接在Url路徑后面的查詢參數,一個@Query相當于拼接一個參數,多個參數中間用,隔開
@Body:
非表單請求體,是結合post請求的
@Field:
表單字段,@Field的用法類似于@Query,不同的是@Field主要用于Post請求數據。
@Part:
表單字段,與 PartMap 配合,適合文件上傳情況
@PartMap:
表單字段,與 Part 配合,適合文件上傳情況;默認接受 Map<String, RequestBody> 類型,非 RequestBody 會通過 Converter 轉換
其它注解
@Url:
@Url是動態(tài)的Url請求數據的注解。需要注意的是使用@Url時,path對應的路徑不能包含”/”,不然每個加到host Url后面的東西都會被省略掉。千萬注意了
@Path:
@Path主要用于Get請求,用于替換Url路徑中的變量字符。
踩坑記錄
當POST請求時,@FormUrlEncoded和@Field簡單的表單鍵值對。兩個需要結合使用,否則會報錯。
其它調用例子
RestFul方式請求:
map作為請求體:
表單提交:
Multipart請求:
高級應用
注解式攔截器
對http請求執(zhí)行統(tǒng)一的攔截處理邏輯,基于url路徑的匹配攔截 。使用的步驟主要分為2步:
- 繼承BasePathMatchInterceptor編寫攔截處理器;
- 接口上使用@Intercept進行標注。如需配置多個攔截器,在接口上標注多個@Intercept注解即可!
擴展注解式攔截器
對攔截注解動態(tài)傳入一些參數,然后再執(zhí)行攔截的時候需要使用這個參數。自定義攔截注解必須使用@InterceptMark標記,并且注解中必須包括include()、exclude()、handler()屬性信息 。使用的步驟主要分為3步:
- 自定義攔截注解
- 繼承BasePathMatchInterceptor編寫攔截處理器
- 接口上使用自定義攔截注解;
例如我們需要在請求頭里面動態(tài)加入accessKeyId、accessKeySecret簽名信息才能正常發(fā)起http請求 ,這個時候可以自定義一個加簽攔截器注解@Sign來實現
請求重試
在接口或者方法上加上@Retry注解即可。@Retry支持重試次數maxRetries、重試時間間隔intervalMs以及重試規(guī)則retryRules配置
錯誤解碼器
在HTTP發(fā)生請求錯誤(包括發(fā)生異?;蛘唔憫獢祿环项A期)的時候,錯誤解碼器可將HTTP相關信息解碼到自定義異常中。你可以在@RetrofitClient注解的errorDecoder()指定當前接口的錯誤解碼器,自定義錯誤解碼器需要實現ErrorDecoder接口。