Forest介紹
Forest 是一個開源的 Java HTTP 客戶端框架,它能夠將 HTTP 的所有請求信息(包括 URL、Header 以及 Body 等信息)綁定到您自定義的 Interface 方法上,能夠通過調用本地接口方法的方式發送 HTTP 請求
現已超過 1700 star
Forest 如何使用
Forest 不需要您編寫具體的 HTTP 調用過程,只需要您定義一個接口,然后通過 Forest 注解將 HTTP 請求的信息添加到接口的方法上即可。請求發送方通過調用您定義的接口便能自動發送請求和接受請求的響應
Forest 的工作原理
Forest 會將您定義好的接口通過動態代理的方式生成一個具體的實現類,然后組織、驗證 HTTP 請求信息,綁定動態數據,轉換數據形式,SSL 驗證簽名,調用后端 HTTP API(httpclient 等 API)執行實際請求,等待響應,失敗重試,轉換響應數據到 Java 類型等臟活累活都由這動態代理的實現類給包了。 請求發送方調用這個接口時,實際上就是在調用這個干臟活累活的實現類
官網和倉庫地址
官網地址:
http://forest.dtflyx.com
Gitee 倉庫地址:
https://gitee.com/dromara/forest
Github 倉庫地址:
https://github.com/dromara/forest
重點更新內容
新增用於指定請求體類型的注解@BodyType
,可用於發送請求體格式與Content-Type頭相異的數據
/** * 此請求Content-Type頭為 x-www-form-urlencoded * 而請求體的格式卻可以是JSON格式 */ @BodyType("json") @Post(url = "/", contentType = ContentType.APPLICATION_X_WWW_FORM_URLENCODED) String send(@Body("name") String name, @Body("value") Object value);
@BodyType
注解同時可以指定Encoder
/** * 指定請求體格式為json的同時,指定Encoder為Jackson轉換器 */ @BodyType(type = "json", encoder = ForestJacksonConverter.class) @Post(url = "/", contentType = ContentType.APPLICATION_X_WWW_FORM_URLENCODED) String send(@Body Entry entry);
如果要指定特定JSON轉換器為某一請求的Encoder,可以使用對應JSON框架的快捷注解
/** * 指定Fastjson為Encoder */ @FastjsonEncoder @Post("/") String sendFastjson(@Body Entry entry);
/** * 指定Jackson為Encoder */ @JacksonEncoder @Post("/") String sendJackson(@Body Entry entry);
/** * 指定Gson為Encoder */ @GsonEncoder @Post("/") String sendGson(@Body Entry entry);
本次更新內容
新增特性
- feat: 指定請求體類型的@BodyType注解 (#I4IF3N)
- feat: 新增獲取全部請求體中鍵值對參數的方法 (#I4GWO7)
修復的BUG
- fix: 在請求中設置自定義Encoder無效 (#I4HNZF)
- fix: url解析問題,如果包含@符@會去掉 (#I4GQWW)
其它改動
- add: BodyType注解
- add: FastjsonEncoder注解
- add: GsonEncoder注解
- add: JacksonEncoder注解
不兼容改動
- delete: com.dtflys.forest.http.ForestBodyType類
- update:
ForestRequest
類的setBodyType
方法和bodyType
方法的參數類型改為ForestDataType