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 小时前
【若依项目-产品经理视角】深度拆解 RuoYi-Vue-Pro 商城模块:从商品管理到交易引擎,50 张表撑起一整套电商系统
java·大数据·vue.js·产品经理·ai编程
GetcharZp4 小时前
抛弃低效SSH!这套Ansible+Web可视化神器,让你天天准点下班!
后端
码智社5 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言
萧瑟余晖6 小时前
JDK 26 新特性详解
java·开发语言
马优晨6 小时前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
2601_960567967 小时前
电商套图自动化效率的工程量化分析——从逐张生成到批量套图的架构演进
运维·架构·自动化
shiyi.十一8 小时前
第2章:应用层 — 知识要点与架构
网络·计算机网络·架构
weixin_446260858 小时前
HACO:面向动态部署环境的对冲式智能计算可靠多智能体调度框架
后端·python·flask
张忠琳8 小时前
【NVIDIA】 NVIDIA Container Toolkit v1.19.1 — OCI 模块超深度分析之三
云原生·容器·架构·kubernetes·nvidia