最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中輕量級http開發(fā)庫Unirest使用及實(shí)用技巧

 更新時間:2025年10月21日 10:01:52   作者:許于寶的博客  
Unirest for Java 是一個輕量級、易于使用的 HTTP 客戶端庫,旨在簡化 Java 應(yīng)用程序中的 HTTP 請求發(fā)送和響應(yīng)處理,本文詳細(xì)介紹它的主要特性、基本用法以及一些實(shí)用技巧,感興趣的朋友跟隨小編一起看看吧

Unirest for Java 是一個輕量級、易于使用的 HTTP 客戶端庫,旨在簡化 Java 應(yīng)用程序中的 HTTP 請求發(fā)送和響應(yīng)處理。它提供了簡潔的鏈?zhǔn)?API,支持同步和異步請求,并且能夠輕松處理 JSON 等常見數(shù)據(jù)格式。下面我會詳細(xì)介紹它的主要特性、基本用法以及一些實(shí)用技巧。

下面是一個表格,匯總了 Unirest for Java 的主要特性:

特性維度說明
設(shè)計(jì)理念提供簡單易用的鏈?zhǔn)?API,降低 HTTP 客戶端開發(fā)復(fù)雜度
依賴體積輕量級,傳統(tǒng)依賴方式無需外部依賴;Standalone 方式包含所有依賴
HTTP 方法支持 GET、POST、PUT、DELETE 等
請求類型支持同步和異步請求
數(shù)據(jù)格式支持方便地處理 JSON(需選擇模塊,如 Gson 或 Jackson)
JSON 處理從 4.x 版本開始,需顯式引入 Gson 或 Jackson 等 JSON 處理模塊
模塊化設(shè)計(jì)采用模塊化設(shè)計(jì),例如 JSON 處理可作為獨(dú)立模塊引入

?? 安裝與配置

在你的 Java 項(xiàng)目中使用 Unirest,通常只需要通過 Maven 或 Gradle 添加依賴。

Maven 依賴
Unirest 提供了兩種主要的依賴引入方式:

  1. 傳統(tǒng)依賴:需要項(xiàng)目自身已包含必要的依賴項(xiàng)(如 Apache HTTP Client 和 JSON 處理庫)。
  2. Standalone 依賴:包含了所有必須的依賴,避免了潛在依賴沖突。
<!-- 方式一:傳統(tǒng)依賴 -->
<dependency>
    <groupId>com.konghq</groupId>
    <artifactId>unirest-java</artifactId>
    <version>3.14.1</version> <!-- 請注意版本更新 -->
</dependency>
<!-- 方式二:Standalone 依賴(推薦避免依賴沖突) -->
<dependency>
    <groupId>com.konghq</groupId>
    <artifactId>unirest-java</artifactId>
    <version>3.14.1</version>
    <classifier>standalone</classifier>
</dependency>

Gradle 依賴

// 傳統(tǒng)依賴
implementation 'com.konghq:unirest-java:3.14.1'
// 或者 Standalone 依賴
implementation 'com.konghq:unirest-java:3.14.1:standalone'

?? 關(guān)于 4.x 版本
Unirest 的 4.x 版本采用了更模塊化的設(shè)計(jì)。例如,JSON 處理功能需要單獨(dú)引入特定模塊(如 unirest-modules-gsonunirest-modules-jackson),并推薦使用 BOM(Bill of Materials)來管理依賴版本。建議訪問 Unirest Java 官方文檔GitHub 倉庫 了解最新版本信息和升級指南。

?? 核心用法

Unirest 的核心設(shè)計(jì)圍繞著簡潔的鏈?zhǔn)?API,讓你能夠流暢地構(gòu)建 HTTP 請求。

1. 發(fā)送 GET 請求

GET 請求通常用于從服務(wù)器獲取資源。Unirest 使得發(fā)送帶參數(shù)的 GET 請求非常方便。

import kong.unirest.HttpResponse;
import kong.unirest.JsonNode;
import kong.unirest.Unirest;
// 發(fā)送一個簡單的 GET 請求
HttpResponse<String> response = Unirest.get("http://httpbin.org/get")
  .header("accept", "application/json") // 設(shè)置請求頭
  .queryString("apiKey", "123") // 添加查詢參數(shù)
  .asString(); // 指定期望的響應(yīng)體類型
System.out.println(response.getStatus()); // 獲取狀態(tài)碼
System.out.println(response.getBody()); // 獲取響應(yīng)體
// 查詢參數(shù)可以通過多種方式添加
// 逐個添加
Unirest.get("http://localhost")
                .queryString("fruit", "apple")
                .queryString("droid", "R2D2")
                .asString();
// 請求結(jié)果為 http://localhost?fruit=apple&droid=R2D2
// 使用集合添加
Unirest.get("http://localhost")
        .queryString("fruit", Arrays.asList("apple", "orange"))
        .queryString(ImmutableMap.of("droid", "R2D2", "beatle", "Ringo"))
        .asString();
// 請求結(jié)果為 http://localhost?fruit=apple&fruit=orange&droid=R2D2&beatle=Ringo

2. 發(fā)送 POST 請求

POST 請求常用于向服務(wù)器提交數(shù)據(jù)。Unirest 支持多種方式提交數(shù)據(jù)。

// 提交表單數(shù)據(jù)
HttpResponse<String> response = Unirest.post("http://httpbin.org/post")
  .header("accept", "application/json")
  .field("param1", "value1") // 添加表單字段
  .field("param2", "value2")
  .asString();
// 提交 JSON 數(shù)據(jù)(需要相應(yīng)的 JSON 處理庫,如 Gson)
HttpResponse<JsonNode> jsonResponse = Unirest.post("http://localhost/post")
      .header("accept", "application/json")
      .header("Content-Type", "application/json")
      .body("{\"name\": \"Gary\", \"age\": 30}") // 直接傳遞 JSON 字符串
      // 或者傳遞一個可序列化的 Java 對象
      // .body(new SomeUserObject("Gary")) 
      .asJson(); // 解析響應(yīng)為 JsonNode
// 提交原始字符串?dāng)?shù)據(jù)
Unirest.post("http://localhost")
                .body("This is the entire body")
                .asEmpty();

3. 使用路徑參數(shù)和設(shè)置基礎(chǔ) URL

路徑參數(shù) (Route Parameters) 可以方便地動態(tài)設(shè)置 URL 中的部分:

// 使用占位符 {fruit},并通過 routeParam 設(shè)置其值
Unirest.get("http://localhost/{fruit}")
     .routeParam("fruit", "apple") // 動態(tài)替換 {fruit} 為 apple
     .asString();
// 請求結(jié)果為 http://localhost/apple
// 所有參數(shù)值都會自動進(jìn)行 URL 編碼

設(shè)置基礎(chǔ) URL (Default Base URL) 可以簡化重復(fù)的域名部分:

// 配置默認(rèn)基礎(chǔ) URL
Unirest.config().defaultBaseUrl("http://homestar.com");
// 后續(xù)請求只需指定路徑
Unirest.get("/runner").asString(); // 實(shí)際請求 http://homestar.com/runner

4. 設(shè)置請求頭與身份認(rèn)證

// 設(shè)置自定義請求頭
Unirest.get("http://localhost")
            .header("Accept", "application/json")
            .header("x-custom-header", "hello")
            .asString();
// 基本身份認(rèn)證 (Basic Authentication)
Unirest.get("http://localhost")
            .basicAuth("user", "password1!") // 自動進(jìn)行 Base64 編碼
            .asString();
// 此調(diào)用會添加請求頭 "Authorization: Basic dXNlcjpwYXNzd29yZDEh"
// 請注意,涉及敏感信息時務(wù)必使用 HTTPS

5. 處理響應(yīng)

.asXXX() 方法(如 asString, asJson)會阻塞當(dāng)前線程直到收到 HTTP 響應(yīng)。HttpResponse 對象包含了響應(yīng)的詳細(xì)信息:

HttpResponse<String> response = Unirest.get("http://httpbin.org/get").asString();
int status = response.getStatus(); // 獲取狀態(tài)碼,例如 200
String body = response.getBody(); // 獲取響應(yīng)體字符串
Headers headers = response.getHeaders(); // 獲取響應(yīng)頭信息
String contentType = response.getHeaders().getFirst("Content-Type"); // 獲取指定響應(yīng)頭

6. 發(fā)送 PUT 和 DELETE 請求

// 發(fā)送 PUT 請求
HttpResponse<String> putResponse = Unirest.put("http://httpbin.org/put")
  .header("accept", "application/json")
  .field("param1", "value1")
  .field("param2", "value2")
  .asString();
// 發(fā)送 DELETE 請求
HttpResponse<String> deleteResponse = Unirest.delete("http://httpbin.org/delete")
  .header("accept", "application/json")
  .queryString("apiKey", "123")
  .asString();

?? 高級特性與配置

異步請求

Unirest 支持異步發(fā)送請求,這對于提高應(yīng)用程序的吞吐量和響應(yīng)性非常有用。

// 使用 Future 處理異步請求
Future<HttpResponse<JsonNode>> future = Unirest.post("http://localhost/post")
      .header("accept", "application/json")
      .field("param1", "value1")
      .asJsonAsync(new Callback<JsonNode>() { // 指定回調(diào)函數(shù)
          @Override
          public void completed(HttpResponse<JsonNode> response) {
               // 請求成功完成時調(diào)用
               int code = response.getStatus();
               JsonNode body = response.getBody();
               Headers headers = response.getHeaders();
          }
          @Override
          public void failed(UnirestException e) {
               // 請求失敗時調(diào)用
               System.out.println("The request has failed: " + e.getMessage());
          }
          @Override
          public void cancelled() {
               // 請求被取消時調(diào)用
               System.out.println("The request has been cancelled");
          }
      });
// 在未來某個時刻,你可以使用 future.get() 獲取結(jié)果(這會阻塞)

文件上傳

Unirest 簡化了文件上傳的過程。

// 分塊上傳大文件(示例框架,需完善)
try {
    String filePath = "path/to/large/file.zip";
    int chunkSize = 1024 * 1024; // 1MB 每塊
    int totalChunks = (int) Math.ceil(new File(filePath).length() / (double) chunkSize);
    for (int chunkNumber = 0; chunkNumber < totalChunks; chunkNumber++) {
        byte[] chunkData = getChunkData(filePath, chunkNumber, chunkSize); // 需要實(shí)現(xiàn)讀取文件塊的方法
        HttpResponse<String> chunkResponse = Unirest.post("http://example.com/upload")
                .field("fileChunk", chunkData)
                .field("chunkNumber", chunkNumber)
                .field("totalChunks", totalChunks)
                .asString();
        // 處理每個分塊的上傳響應(yīng)
    }
    // 所有分塊上傳完成后,通知服務(wù)器合并
    HttpResponse<String> mergeResponse = Unirest.post("http://example.com/merge")
            .field("fileName", "file.zip")
            .field("totalChunks", totalChunks)
            .asString();
} catch (Exception e) {
    e.printStackTrace();
}

配置 Unirest

Unirest 提供了一些全局配置選項(xiàng),用于設(shè)置連接超時、重試策略等。

Unirest.config()
    .connectTimeout(30000) // 設(shè)置連接超時為30秒
    .enableCookieManagement(true) // 啟用 Cookie 管理
    .verifySsl(false) // 是否驗(yàn)證 SSL 證書(生產(chǎn)環(huán)境應(yīng)設(shè)為 true)
    .automaticRetries(true) // 啟用自動重試
    .defaultBaseUrl("http://homestar.com"); // 設(shè)置默認(rèn)基礎(chǔ) URL

// 注意:在 JavaFX 或長時間運(yùn)行的應(yīng)用程序中,在程序退出時關(guān)閉 Unirest 實(shí)例是一個好習(xí)慣
// Unirest.shutdown();

?? 實(shí)踐建議

  1. 資源清理:如果你的應(yīng)用程序會長時間運(yùn)行或多次創(chuàng)建 Unirest 實(shí)例,在程序退出或不再需要時,調(diào)用 Unirest.shutdown() 來釋放底層連接管理器資源,避免內(nèi)存泄漏。
  2. HTTPS 安全:在生產(chǎn)環(huán)境中,務(wù)必啟用 SSL 證書驗(yàn)證Unirest.config().verifySsl(true)),并使用 HTTPS 協(xié)議傳輸敏感信息。僅在開發(fā)測試時考慮禁用 SSL 驗(yàn)證。
  3. 異常處理:網(wǎng)絡(luò)請求充滿不確定性,務(wù)必使用 try-catch 塊妥善處理 UnirestException 等異常,并根據(jù)需要檢查 HTTP 狀態(tài)碼。
  4. 依賴管理
    • 對于新項(xiàng)目,建議評估使用 4.x 版本,并根據(jù)需要引入 JSON 模塊。
    • 使用 standalone 分類器可以減少依賴沖突的可能性。
    • 如果項(xiàng)目本身已管理了 HTTP 客戶端和 JSON 庫,則可使用傳統(tǒng)依賴方式。
  5. JSON 處理:在 3.x 版本中,Unirest 通常默認(rèn)集成 Gson。在 4.x 版本中,你需要明確選擇并引入 unirest-modules-gsonunirest-modules-jackson 等模塊。

?? 總結(jié)

Unirest for Java 通過其鏈?zhǔn)?API 和合理的默認(rèn)配置,顯著降低了在 Java 應(yīng)用中處理 HTTP 請求的復(fù)雜度。無論是簡單的 REST API 調(diào)用還是復(fù)雜的文件上傳場景,它都能提供清晰、靈活的解決方案。

選擇 Unirest,意味著你在追求開發(fā)效率和應(yīng)用性能之間找到一個不錯的平衡點(diǎn)。當(dāng)然,對于極度追求性能或者需要精細(xì)控制 HTTP 行為的場景,你可能仍需考慮更底層的庫(如 Apache HttpClient 或 OkHttp)。但對于大多數(shù)日常開發(fā)任務(wù)而言,Unirest 無疑是一個“灰常”優(yōu)秀的工具。

到此這篇關(guān)于Java中輕量級http開發(fā)庫Unirest使用及實(shí)用技巧的文章就介紹到這了,更多相關(guān)java http開發(fā)庫unirest內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用ServletUtil.write方法下載接口文件中文亂碼問題解決

    使用ServletUtil.write方法下載接口文件中文亂碼問題解決

    本文主要介紹了使用ServletUtil.write方法下載接口文件中文亂碼問題解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-05-05
  • Maven構(gòu)建SpringBoot集成MyBatis過程

    Maven構(gòu)建SpringBoot集成MyBatis過程

    文章介紹了如何使用Maven創(chuàng)建一個Spring Boot項(xiàng)目,并集成MyBatis,首先,配置Maven環(huán)境,然后在pom.xml中添加MyBatis依賴,配置數(shù)據(jù)庫連接信息,最后生成Mapper XML文件和DAO層代碼
    2024-11-11
  • Java讀取文件的簡單實(shí)現(xiàn)方法

    Java讀取文件的簡單實(shí)現(xiàn)方法

    這篇文章主要介紹了Java讀取文件的簡單實(shí)現(xiàn)方法,通過一個讀取txt格式的log文件為例,詳細(xì)的講述了Java讀取文件的方法及原理,需要的朋友可以參考下
    2014-09-09
  • Java容器ArrayList原理解析

    Java容器ArrayList原理解析

    這篇文章主要介紹了Java容器ArrayList原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02
  • Java 中的字符串替換方法之replace, replaceAll 和 replaceFirst示例詳解

    Java 中的字符串替換方法之replace, replaceAll 和 rep

    在Java中,字符串的替換是一種常見的操作,特別是在處理文本和格式化輸出時,本文將詳細(xì)討論這些方法的用法、區(qū)別以及示例,感興趣的朋友一起看看吧
    2024-12-12
  • java如何連續(xù)執(zhí)行多條cmd命令

    java如何連續(xù)執(zhí)行多條cmd命令

    這篇文章主要介紹了java如何連續(xù)執(zhí)行多條cmd命令的方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • springboot?vue接口測試HutoolUtil?TreeUtil處理樹形結(jié)構(gòu)

    springboot?vue接口測試HutoolUtil?TreeUtil處理樹形結(jié)構(gòu)

    這篇文章主要介紹了springboot?vue接口測試HutoolUtil?TreeUtil處理樹形結(jié)構(gòu),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • java中g(shù)radle項(xiàng)目報錯org.gradle?.api.plugins.MavenPlugin解決辦法

    java中g(shù)radle項(xiàng)目報錯org.gradle?.api.plugins.MavenPlugin解決辦法

    在使用Gradle時開發(fā)者可能會遇到org.gradle?.api.plugins.MavenPlugin報錯提醒,這篇文章主要給大家介紹了關(guān)于java中g(shù)radle項(xiàng)目報錯org.gradle?.api.plugins.MavenPlugin的解決辦法,需要的朋友可以參考下
    2023-12-12
  • 解決java文件流處理異常 mark/reset not supported問題

    解決java文件流處理異常 mark/reset not supported問題

    這篇文章主要介紹了解決java文件流處理異常 mark/reset not supported問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • SpringBoot注冊web組件的實(shí)現(xiàn)方式

    SpringBoot注冊web組件的實(shí)現(xiàn)方式

    Servlet是Java Web應(yīng)用程序的基礎(chǔ),它提供了處理客戶端請求的機(jī)制,Servlet三大組件是指Servlet、Filter和Listener,它們是Java Web應(yīng)用程序的核心組件,本文將給大家介紹一下SpringBoot注冊web組件的實(shí)現(xiàn)方式,需要的朋友可以參考下
    2023-10-10

最新評論

长宁县| 宣恩县| 将乐县| 马关县| 青河县| 高雄市| 洛扎县| 金堂县| 宁阳县| 龙江县| 宽甸| 澄城县| 安仁县| 乐安县| 大兴区| 彰化市| 华容县| 准格尔旗| 阜城县| 怀来县| 荔浦县| 通榆县| 陇西县| 南宁市| 镶黄旗| 凯里市| 阿拉善右旗| 庆阳市| 庄河市| 辉县市| 噶尔县| 龙江县| 黄冈市| 岗巴县| 专栏| 阿城市| 西平县| 蒙自县| 莎车县| 穆棱市| 三明市|