Java 11 新特性之 标准HTTP客户端API

Java 11 引入了一个全新的标准 HTTP 客户端 API,旨在取代旧的 ​​HttpURLConnection​​ API,并提供对现代 HTTP 协议的支持,包括 HTTP/2 和 WebSocket。这个新的 HTTP 客户端 API 被设计得更加现代化、易用且高效。

主要特性

  1. 支持 HTTP/2: 新的 HTTP 客户端默认支持 HTTP/2,这带来了性能上的显著提升,比如多路复用(multiplexing)、头部压缩等特性。
  2. 流畅的 API 设计: 新的 API 提供了流畅的构建方式,使得编写网络请求代码变得更加直观和简洁。
  3. 异步与同步支持: 支持同步和异步请求处理,允许开发者根据需求选择最合适的请求方式。
  4. WebSocket 支持: 内置了对 WebSocket 的支持,方便实现实时双向通信应用。
  5. 更好的资源管理: 自动管理连接池和其他资源,减少了手动管理带来的复杂性。

使用示例

以下是一些使用 Java 11 标准 HTTP 客户端 API 的基本示例:

发送 GET 请求

java 复制代码
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class HttpClientExample {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create("https://jsonplaceholder.typicode.com/posts/1"))
                .build();

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

        System.out.println(response.body());
    }
}

发送 POST 请求

java 复制代码
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;

public class HttpClientPostExample {
    public static void main(String[] args) throws Exception {
        String jsonInputString = "{ "title": "foo", "body": "bar", "userId": 1 }";

        HttpClient client = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create("https://jsonplaceholder.typicode.com/posts"))
                .header("Content-Type", "application/json")
                .POST(HttpRequest.BodyPublishers.ofString(jsonInputString, StandardCharsets.UTF_8))
                .build();

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

        System.out.println(response.body());
    }
}

异步请求

对于需要非阻塞操作的情况,可以使用异步方法:

java 复制代码
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.concurrent.CompletableFuture;

public class HttpClientAsyncExample {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create("https://jsonplaceholder.typicode.com/posts/1"))
                .build();

        CompletableFuture<HttpResponse<String>> future = client.sendAsync(request, HttpResponse.BodyHandlers.ofString());

        future.thenApply(HttpResponse::body)
              .thenAccept(System.out::println);
        
        // 等待异步操作完成
        future.join();
    }
}

总结

Java 11 的新 HTTP 客户端 API 提供了对现代 HTTP 协议的强大支持,简化了网络编程的工作量,并提高了开发效率。无论是发送简单的 GET 请求还是复杂的异步交互,新的 API 都能提供灵活且强大的解决方案。如果你正在考虑升级到 Java 11 或更高版本,尝试使用这个新的 HTTP 客户端将是一个不错的选择。

相关推荐
根目录下的猫1 小时前
RK3588适配的轻量级AI模型推荐
人工智能·后端·python·目标检测
景熙55231 小时前
15.Java 8 Stream 流入门到实战
java·开发语言·数据结构
wno7041 小时前
Spring Security权限控制
java·python·spring
星栈2 小时前
用 Rust 写 Agent 服务 -- adk-rust 上手记
后端·agent
杨运交2 小时前
[071][验证码模块]基于Spring拦截器的验证码认证设计思想
java·后端·spring
Geek-Chow2 小时前
CountDownLatch in Java
java
LucianaiB3 小时前
我用豆包工作 Seed-2.1-pro,复刻了 QQ 时代爆红的魔术图片
后端
码事漫谈3 小时前
智谱 ZCode 静默上传 Git 历史:48 小时信任危机复盘
后端
SL_staff3 小时前
从RBAC到场景化授权:《无忧·企业文档》三级权限模型的技术实践解析
java·开源·产品
掘金码甲哥3 小时前
当对话模型遇上向量模型,vllm production stack 又该如何应对?
后端