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

相关推荐
SUPER52662 小时前
FastApi项目启动失败 got an unexpected keyword argument ‘loop_factory‘
java·服务器·前端
咕噜咕噜啦啦3 小时前
Eclipse集成开发环境的使用
java·ide·eclipse
你的人类朋友4 小时前
【Node】认识一下Node.js 中的 VM 模块
前端·后端·node.js
光军oi5 小时前
全栈开发杂谈————关于websocket若干问题的大讨论
java·websocket·apache
weixin_419658315 小时前
Spring 的统一功能
java·后端·spring
小许学java6 小时前
Spring AI-流式编程
java·后端·spring·sse·spring ai
canonical_entropy6 小时前
对《DDD本质论》一文的解读
后端·架构·领域驱动设计
码事漫谈6 小时前
我用亲身经历告诉你,为什么程序员千万别不把英语当回事
后端
码事漫谈6 小时前
C++ const 用法全面总结与深度解析
后端
haogexiaole6 小时前
Java高并发常见架构、处理方式、api调优
java·开发语言·架构