Java JDK 17 自带的 java.net.http.HttpClient入门案例
Java JDK 17 自带的 java.net.http.HttpClient是 JDK 11 引入的 HTTP 客户端 API 的增强版本,提供了轻量级、现代且符合标准的 HTTP 请求能力。
以下是快速入门指南:
一、核心类与功能
-
HttpClient
-
用于发送 HTTP 请求,支持同步和异步操作。
-
示例创建:
HttpClient client = HttpClient.newHttpClient();
-
-
HttpRequest
- 表示 HTTP 请求,可通过
HttpRequest.newBuilder()
构建。 - 支持 GET、POST、PUT 等方法,可设置请求头、Body 等参数。
- 表示 HTTP 请求,可通过
-
HttpResponse
- 存储 HTTP 响应结果,包含状态码、响应头、Body 等信息。
二、基本使用
1.发送get请求
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://api.example.com/data")) .GET().build();HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println("Status Code: " + response.statusCode());
System.out.println("Response Body: " + response.body());
2. 发送 POST 请求
HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://api.example.com/submit")) .header("Content-Type", "application/json").POST(HttpRequest.BodyPublishers.ofString("{\"key\":\"value\"}")) .build();HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
三、异步请求(非阻塞)
client.sendAsync(request, HttpResponse.BodyHandlers.ofString()) .thenApply(HttpResponse::body).thenAccept(System.out::println) .join(); // 阻塞等待结果(可选)
四、注意事项
-
线程安全
HttpClient
是线程安全的,建议复用同一实例以提高性能。
-
资源管理
- 同步请求需处理可能的
IOException
,异步请求需通过CompletableFuture
管理回调。
- 同步请求需处理可能的
-
与第三方库对比
- 对比 Apache HttpClient,JDK 内置的 HttpClient 更轻量且无需额外依赖69。
五、JDK 17 新特性支持
- 响应式流(Reactive Streams):支持处理大文件或流式数据。
- WebSocket 支持:可通过
WebSocket
类实现双向通信(需 JDK 17+)。
六、环境准备
确保已安装 JDK 17 并配置环境变量,可通过以下命令验证:
java --version # 应显示 JDK 17+