推荐使用JDK 11+内置HttpClient,线程安全建议复用实例;支持同步send和异步sendAsync;需校验statusCode、响应体仅可读一次;JSON请求需手动序列化并设Content-Type;适合绝大多数REST场景。
Java中执行REST请求,推荐使用JDK 11+内置的HttpClient(java.net.http.HttpClient),它取代了已弃用的Apache HttpClient和HttpURLConnection,是现代、异步、响应式且标准统一的HTTP客户端方案。
HttpClient是线程安全的,建议复用单个实例(如通过static final或依赖注入):
// 推荐:复用实例,支持连接池与超时配置
HttpClient client = HttpClient.newBuilder()
.connectTimeout(Duration.ofSeconds(5))
.build();
使用HttpRequest.Builder构建请求,指定URL、方法、头信息和可选的请求体:
// 示例:POST JSON数据
String json = "{\"name\":\"Alice\",\"age\":30}";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.example.com/users"))
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(json))
.build();
HttpClient同时支持阻塞式(send)和非阻塞式(sendAsync)调用:
// 异步示例:处理成功与异常
client.sendAsync(request, HttpResponse.BodyHandlers.ofString())
.thenAccept(resp -> System.out.println(resp.body()))
.exceptionally(t -> { System.err.println("请求失败: " + t); return null; });
响应包含状态码、头信息和body,需主动检查statusCode避免静默失败:
基本上就这些。标准HttpClient简洁、可靠、无第三方依赖,适合绝大多数REST交互场景。