在 Java 開發中,HTTP 客戶端是與服務端交互的關鍵組件。隨著技術發展,出現了多種 HTTP 客戶端庫,本文匯總了常用的 Java HTTP 客戶端,介紹其特點、適用場景,并附上簡單使用示例,方便開發者快速選擇和上手。
1.常用 HTTP 客戶端一覽
名稱 | 簡介 | 特點 |
---|
HttpClient(JDK 自帶) | Java 11 引入的官方 HTTP 客戶端 | 支持異步、HTTP/2,API 現代 |
RestTemplate | Spring 提供的同步 HTTP 客戶端(即將被淘汰) | 簡潔,適合小項目;被 WebClient 替代 |
WebClient | Spring 5 提供的響應式 HTTP 客戶端 | 支持響應式編程,推薦替代 RestTemplate |
OkHttpClient | Square 出品,輕量級高性能 HTTP 客戶端 | 支持異步、連接池、攔截器 |
Apache HttpClient | Apache 出品的經典 HTTP 客戶端庫 | 功能強大、穩定、支持各種高級特性 |
Feign | 聲明式 HTTP 客戶端,適用于 Spring Cloud | 開發效率高,集成 Ribbon/Hystrix |
Retrofit | Square 出品,封裝 OkHttp 的聲明式客戶端 | 強大的 JSON 自動轉換,適合 REST API |
AsyncHttpClient | 異步非阻塞 HTTP 客戶端(如 Netty 實現) | 高并發性能好,用于微服務場景 |
Vert.x WebClient | Vert.x 框架的異步 HTTP 客戶端 | 輕量級、響應式,非常適合微服務 |
Jetty HttpClient | Jetty 提供的 HTTP 客戶端實現 | 支持異步和 HTTP/2,常用于嵌入式 |
2.推薦選擇場景
需求 | 推薦客戶端 |
---|
簡單同步請求 | RestTemplate(傳統)或 HttpClient(Java 11+) |
響應式或高并發 | WebClient, AsyncHttpClient, Vert.x WebClient |
簡潔封裝、聲明式調用 | Feign, Retrofit |
高度可定制 | OkHttp, Apache HttpClient |
3.各客戶端 GET 和 POST 示例
1. HttpClient(Java 11+)
// GET 請求
HttpClient client = HttpClient.newHttpClient();HttpRequest getRequest = HttpRequest.newBuilder().uri(URI.create("https://jsonplaceholder.typicode.com/posts/1")).GET().build();HttpResponse<String> getResponse = client.send(g