Hutool之Http工具類使用
阿新 • • 發佈:2020-11-21
最早接觸Hutool這個集常用工具類為一體的框架工具包是在2018年的時候(酒店業務需要呼叫第三方門鎖API)。
而後19年因為業務接觸到Bmob雲,開始寫對Bmob雲的API,於是便有了這篇文章Hutool工具類之HttpUtil使用Https
最近針對業務,再次用到這個。這次涉及到不同單個服務之間的呼叫,通訊方式還是HTTP為主。
針對最近常用的,做了一些總結。
二、應用場景
- (1)呼叫第三方服務API(第三方服務通常支援HTTP、WebService,一般HTTP比較多);
- (2)單體應用服務之間的服務呼叫;
- (3)分散式服務之間的服務呼叫;
二、HttpUtil
官方文件地址:
https://hutool.cn/docs/#/http/Http%E5%AE%A2%E6%88%B7%E7%AB%AF%E5%B7%A5%E5%85%B7%E7%B1%BB-HttpUtil
大家可以做個參考。
1.Get請求
String apiData = HttpUtil.get(url); String apiData = HttpUtil.get(url,timeout); String apiData = HttpUtil.get(url,paramMap); String apiData = HttpUtil.get(url,paramMap,timeout); String apiData = HttpUtil.createGet(url) .execute().body();
2.Post請求
String apiData = HttpUtil.post(url,body); String apiData= HttpUtil.post(url,body,timeout); String apiData =HttpUtil.post(url,paramMap,timeout); String apiData =HttpUtil.post(url,paramMap); String apiData = HttpUtil.createPost(url) .body(reqDto.toString()) .execute().body();
至於apiData如何由String轉成JSON格式化,可通過Hutools自帶的JSONObject物件或者JSONArray物件進行轉換。
例子如下(以我呼叫部落格園API為例):
private String getToken() { String url = "https://api.cnblogs.com/token";//請求介面地址 Map<String, Object> paramMap = new HashMap<>(); paramMap.put("client_id", ClientId); paramMap.put("client_secret", ClientSecret); paramMap.put("grant_type", "client_credentials"); String result = HttpUtil.post(url, paramMap); JSONObject jsonObject = new JSONObject(result); return "Bearer " + jsonObject.getStr("access_token"); }
上面是針對單一JSONObject物件,下面還有針對陣列是如何拿到具體的元素(這裡是我對接部落格園API程式碼,拿到部落格園各個博主的名稱,然後根據名稱去匹配URL,實現批量資料抓取):
try { Integer pageMaxSize = 200; Integer pageSize = 30; for (int pageParentIndex = 0; pageParentIndex < pageMaxSize; pageParentIndex++) { String homeApiPageData = cnBlogApiService.getSiteHomePostList(pageParentIndex, pageSize); JSONArray getHomeApiPageData = new JSONArray(homeApiPageData); if (getHomeApiPageData.size() > 0) { for (int i = 1; i < getHomeApiPageData.size(); i++) { JSONObject jsonObject = getHomeApiPageData.getJSONObject(i); this.executeCnBlogsImportDataTask(jsonObject.getStr("BlogApp")); } } } return ResponseBaseDTO.createSuccResp(1); } catch (Exception e) { logger.error("/cnblogs/singleImport", e); return ResponseBaseDTO.createFailResp(e.getMessage()); }