知識庫 / Spring / Spring Boot RSS 訂閱

在Java中讀取HTTP響應體為字符串

HTTP Client-Side,REST,Spring Boot
HongKong
11
03:47 AM · Dec 06 ,2025

1. 引言

在本教程中,我們將探索用於將 HTTP 響應體作為字符串讀取的各種 Java 庫。自 Java 的早期版本以來,Java 已經提供了 <em >HttpURLConnection</em > API。它僅包含基本功能,並且以其不夠用户友好的特性而聞名。

通過 JDK 11,Java 引入了新的、改進的 <em >HttpClient</em > API,用於處理 HTTP 通信。我們將討論這些庫,並查看一些替代方案,例如 Apache HttpClient 和 Spring Rest Template。

2. HttpClient

正如之前提到的,HttpClient 已添加到 Java 11 中。它允許我們訪問網絡上的資源,但與 HttpURLConnection 不同,HttpClient 支持 HTTP/1.1 和 HTTP/2。 此外,它 提供同步和異步請求類型

HttpClient 提供了一個現代化的 API,具有很大的靈活性和強大的功能。 此 API 由三個核心類組成: HttpClientHttpRequestHttpResponse

HttpResponse 描述了 HttpRequest 調用 的結果。 HttpResponse 不是直接創建的,並在收到完整主體後才可用。

要將響應主體讀取為 String,我們需要首先創建簡單的客户端和請求對象:

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create(DUMMY_URL))
    .build();

然後,我們將使用 BodyHandlers,並調用 ofString() 方法以返回響應:

HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString());

3. HttpURLConnection

HttpURLConnection 是一個輕量級的 HTTP 客户端,用於通過 HTTP 或 HTTPS 協議訪問資源,並且它允許我們創建 InputStream。 獲得 InputStream 後,我們可以像讀取普通本地文件一樣讀取它。

在 Java 中,我們可以使用 java.net.URL 類和 java.net.HttpURLConnection 類來訪問互聯網。 首先,我們將使用 URL 類來指向一個 Web 資源。 然後,我們可以使用 HttpURLConnection 類來訪問它。

要將 URL 中的響應體作為 String 讀取,我們首先應該使用我們的 URL 創建 HttpURLConnection

HttpURLConnection connection = (HttpURLConnection) new URL(DUMMY_URL).openConnection();

新的 URL(DUMMY_URL).openConnection() 返回一個 HttpURLConnection 對象。該對象允許我們添加頭部信息或檢查響應碼。

接下來,我們將從 connection 對象中獲取 InputStream

InputStream inputStream = connection.getInputStream();

最後,我們需要將 InputStream 轉換為 String

4. Apache HttpClient

在本節中,我們將學習如何使用 Apache HttpClient 將 HTTP 響應體讀取為字符串。

要使用該庫,我們需要將其依賴項添加到我們的 Maven 項目中:

<dependency>
    <groupId>org.apache.httpcomponents.client5</groupId>
    <artifactId>httpclient5</artifactId>
    <version>5.2</version>
</dependency>

我們可以通過 使用 CloseableHttpClient 類來檢索和發送數據。 要使用默認配置創建其實例,可以使用 HttpClients.createDefault()

CloseableHttpClient 提供了一個 execute 方法,用於發送和接收數據。該方法使用 2 個參數。第一個參數的類型是 HttpUriRequest,它有許多子類,包括 HttpGetHttpPost。 第二個參數的類型是 HttpClientResponseHandler, 它從 ClassicHttpResponse 生成一個響應對象。

首先,我們將 創建一個 HttpGet 對象

HttpGet request = new HttpGet(DUMMY_URL);

第二,我們將創建客户端

CloseableHttpClient client = HttpClients.createDefault();

最後,我們將從 執行方法的 結果檢索響應對象:

String response = client.execute(request, new BasicHttpClientResponseHandler());
logger.debug("Response -> {}", response);

我們使用了 BasicHttpClientResponseHandler, 它將響應體返回為字符串。

5. Spring RestTemplate

在本節中,我們將演示如何使用 Spring RestTemplate 讀取 HTTP 響應體為字符串。請注意,RestTemplate 現在已被棄用。因此,我們應該考慮使用 Spring WebClient,如下一節所述。

RestTemplate 類是 Spring 提供的基本工具,它提供了一個簡單的模板,用於通過底層的 HTTP 客户端庫(如 JDK HttpURLConnection、Apache HttpClient 等)進行客户端 HTTP 操作。

RestTemplate 提供了 一些有用的方法,用於創建 HTTP 請求和處理響應。

我們可以通過在我們的 Maven 項目中添加一些依賴來使用這個庫:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>${spring-boot.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <version>${spring-boot.version}</version>
    <scope>test</scope>
</dependency>

為了向Web服務器發送請求並以字符串形式返回響應體,我們將創建一個 RestTemplate 的實例

RestTemplate restTemplate = new RestTemplate();

然後,我們將通過調用 getForObject()</em/> 方法,傳入 URL 和所需響應類型,獲取響應對象。我們將在示例中使用 String.class</em/>:

String response = restTemplate.getForObject(DUMMY_URL, String.class);

6. Spring WebClient

最後,我們將看到如何使用 Spring WebClient,這是一種反應式、非阻塞的解決方案,取代了 Spring RestTemplate

我們可以通過將 spring-boot-starter-webflux 依賴項添加到 Maven 項目中來使用該庫:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-webflux</artifactId>
</dependency>

執行 HTTP Get 請求最簡單的方法是使用 create 方法:

WebClient webClient = WebClient.create(DUMMY_URL);

最簡單的方法是調用 getretrieve 方法。 然後我們將使用 bodyToMono 方法,並使用 String.class 類型來提取內容作為單個 String 實例:

Mono<String> body = webClient.get().retrieve().bodyToMono(String.class);

最後,我們將調用 block 方法,告知 Web 流在字符串結果中等待整個流體內容完全讀取並複製:

String s = body.block();

7. 結論

在本文中,我們學習瞭如何使用多個庫將 HTTP 響應體讀取為 String

user avatar
0 位用戶收藏了這個故事!
收藏

發佈 評論

Some HTML is okay.