Forest介紹
Forest 是一個開源的 Java HTTP 客戶端框架,它能夠將 HTTP 的所有請求信息(包括 URL、Header 以及 Body 等信息)綁定到您自定義的 Interface 方法上,能夠通過調用本地接口方法的方式發送 HTTP 請求
現已超過 1600 star
Forest 如何使用
Forest 不需要您編寫具體的 HTTP 調用過程,只需要您定義一個接口,然后通過 Forest 注解將 HTTP 請求的信息添加到接口的方法上即可。請求發送方通過調用您定義的接口便能自動發送請求和接受請求的響應。
Forest 的工作原理
Forest 會將您定義好的接口通過動態代理的方式生成一個具體的實現類,然后組織、驗證 HTTP 請求信息,綁定動態數據,轉換數據形式,SSL 驗證簽名,調用后端 HTTP API(httpclient 等 API)執行實際請求,等待響應,失敗重試,轉換響應數據到 Java 類型等臟活累活都由這動態代理的實現類給包了。 請求發送方調用這個接口時,實際上就是在調用這個干臟活累活的實現類。
文檔和示例
本次更新
新增特性:
- feat: getbody可以有key-value形式進行取值 (#I4FUSB:建議改進下getbody可以有key -value形式進行取值)
BUG FIX:
- fix: URL參數會重復Encode (#I4FDJC:URL參數會重復Encode)
- fix: {變量名}格式字符串模板在引用隱式變量時出錯 (#I4EP04:{變量名}格式字符串模板在引用隱式變量時出錯)
- fix: 對於http://localhost/xxx:yyy這種形式的URL解析錯誤 (#I4GC5M:對於http://localhost/xxx:yyy這種形式的URL解析錯誤)
- fix: httpclient和okhttp編碼行為不一致 (#I4FRR5:httpclient和okhttp編碼行為不一致)
- fix: post請求的url為空的時候有bug (#I4F3XS:post請求的url為空的時候有bug)
- fix: retrywhen中的異常被吃掉, 無法拋出. 且異常后僅觸發一次重試 (#I4E4X7:retrywhen中的異常被吃掉, 無法拋出. 且異常后僅觸發一次重試)
- fix: Httpclient后端在連續異步發送請求后會出現I/IO報錯 (#I47FD7:Httpclient后端在連續異步發送請求后會出現I/IO報錯)
代碼重構:
- refactor: 重構后端代碼: 表單類型Body部分
- refactor: 重構后端: okhttp3
- refactor: 重構后端: httpclient
- refactor: 重構后端: 重寫異步請求邏輯
代碼優化:
- optimize: Forest對於一些錯誤的響應處理不友好 (#I4EIDJ:Forest對於一些錯誤的響應處理不友好)
其它代碼改動:
- add: ForestBody類
- add: Validations類
- delete: OkHttp3不再使用的請求執行器類