在 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