在现代 Web 开发中,与 RESTful Web 服务交互是一项核心任务。Java 作为一种广泛使用的编程语言,提供了多种处理 HTTP 请求的方法。在 Java 11 之前,开发者通常使用 HttpURLConnection
或第三方库(如 Apache HttpClient)。然而,这些方法要么过于底层,要么需要额外依赖。Java 11 引入了全新的 HttpClient
API,位于 java.net.http
包中,提供了一种更现代化、灵活的方式来处理 HTTP 通信。本文将详细介绍如何使用 Java 11 的 HttpClient 处理 RESTful Web 服务,并通过实际示例展示其功能。
什么是 HttpClient?
HttpClient
是 Java 11 引入的标准 API,用于发送 HTTP 请求和接收响应。它支持以下关键特性:
- 协议支持:兼容 HTTP/1.1 和 HTTP/2,HTTP/2 提供头部压缩和多路复用等性能优化。
- 同步和异步:支持阻塞(同步)和非阻塞(异步)请求,适合不同应用场景。
- 构建器模式:使用流畅的构建器模式配置客户端和请求。
- 响应处理:通过
BodyHandlers
提供多种方式处理响应体,如字符串、字节数组或文件。 - 其他功能:支持重定向、代理、认证和 WebSocket。
与旧的 HttpURLConnection
相比,HttpClient 更易用,功能更丰富,适合现代 Web 应用的需要。它不仅限于 RESTful 服务,还可用于下载文件、访问网页等任何需要从 URL 读取数据的场景。
创建 HttpClient 实例
要使用 HttpClient,首先需要创建一个 HttpClient
实例。HttpClient
使用构建器模式,允许配置协议版本、重定向策略等。以下是一个示例:
import java.net.http.HttpClient;
import java.net.http.HttpClient.Redirect;
import java.net.http.HttpClient.Version;HttpClient client = HttpClient.newBuilder().version(Version.HTTP_2) // 优先使用 HTTP/2.followRedirects(Redirect.NORMAL) // 自动跟随重定向.build();
配置说明:
version(Version.HTTP_2)
:尝试使用 HTTP/2,若服务器不支持则回退到 HTTP/1.1。followRedirects(Redirect.NORMAL)
:自动处理重定向,最多跟随一定次数。- 其他可选配置包括代理(
proxy
)、认证(authenticator
)等。
创建的 HttpClient
实例是不可