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 客户端将是一个不错的选择。

相关推荐
翊谦4 小时前
Java Agent开发 Milvus 向量数据库安装
java·数据库·milvus
晓晓hh4 小时前
JavaSE学习——迭代器
java·开发语言·学习
查古穆4 小时前
栈-有效的括号
java·数据结构·算法
自然语4 小时前
人工智能之数字生命 认知架构白皮书 第7章
人工智能·架构
Java面试题总结4 小时前
Spring - Bean 生命周期
java·spring·rpc
硅基诗人4 小时前
每日一道面试题 10:synchronized 与 ReentrantLock 的核心区别及生产环境如何选型?
java
014-code4 小时前
String.intern() 到底干了什么
java·开发语言·面试
eastyuxiao5 小时前
如何在不同的机器上运行多个OpenClaw实例?
人工智能·git·架构·github·php
摇滚侠5 小时前
JAVA 项目教程《苍穹外卖-12》,微信小程序项目,前后端分离,从开发到部署
java·开发语言·vue.js·node.js
楚国的小隐士5 小时前
为什么说Rust是对自闭症谱系人士友好的编程语言?
java·rust·编程·对比·自闭症·自闭症谱系障碍·神经多样性