失乡骑士
801.24MB · 2025-12-20
前面有两期总共介绍了四款工具,调用第三方API像调用接口一样丝滑。
dromara的ForestSpringCloud的OpenFeignSpring6的@HttpExchangeretrofit-spring-boot-starter这种方式需要保证项目能够启动起来才可以,在单元测试的时候,需要保证项目能够跑起来,才能从临时的Spring容器中获取到客户端,然后调用。
但是,平时开发中为了方便测试,有时候就想像main方法一样直接调用,不想调试本地的环境。
那今天就推荐几款工具库!
既然是工具,当然越方便越会受开发开发者喜爱。
Apache HttpClientApache 旗下的老牌、强大、灵活的 HTTP 客户端库。功能极其丰富,几乎可以处理所有复杂的 HTTP 场景,是许多企业和项目的历史选择。所谓Apache出品必是精品。
测试URL:http://shanhe.kim/api/za/xingzuo.php?msg=双鱼座
案例
@Test
void apacheClient() {
// 1. 创建 HttpClient 对象
try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
// 2. 创建 HTTP GET 请求
HttpGet httpGet = new HttpGet(BASE_URL);
// 3. 执行请求并获取响应
try (CloseableHttpResponse response = httpClient.execute(httpGet)) {
// 4. 获取响应实体
HttpEntity entity = response.getEntity();
if (entity != null) {
// 5. 将响应实体转换为字符串
String result = EntityUtils.toString(entity);
System.out.println(result);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
注意事项:
CloseableHttpClient 和 CloseableHttpResponse 以释放网络连接资源,推荐使用 try-with-resources 语句。PoolingHttpClientConnectionManager) 来提升性能。如果你是 Spring 传统 MVC 项目且不想引入额外依赖,它是一个可靠的选择。
OkHttpSquare 公司开源的现代、高效、轻量级的 HTTP 客户端。默认支持 HTTP/2 和 WebSocket,API 设计友好,是 Android 和许多开源项目的首选。
案例
@Test
void okClient() {
// 1. 创建 OkHttpClient 实例 (建议全局单例)
OkHttpClient client = new OkHttpClient();
// 2. 构建 Request 对象
Request request = new Request.Builder().url(BASE_URL).get().build();
// 3. 发起同步调用并接收响应
try (Response response = client.newCall(request).execute()) {
if (response.isSuccessful() && response.body() != null) {
// 4. 获取响应体字符串
String result = response.body().string();
System.out.println(result);
} else {
System.out.println("请求失败: " + response.code());
}
} catch (Exception e) {
e.printStackTrace();
}
}
注意事项:
OkHttpClient 实例应共享同一个全局实例,因为它内部自己管理连接池和线程池,创建多个实例会浪费资源。response.body().string() 只能调用一次,多次调用会抛出异常。如果需要多次读取,应先将其保存到变量中。可以与 Retrofit 库(同样是 Square 出品)完美结合,用注解的方式将 HTTP API 转换为 Java 接口,极大地提升开发效率。
Spring 的 RestTemplateSpring Framework 提供的用于同步 HTTP 请求的模板工具类。它简化了与 HTTP 服务的交互,并集成了 Spring 的生态(如消息转换器)。
注意:Spring 5 后已标记为渐退 (deprecated),推荐使用 WebClient。
案例
@Test
void restTemplateClient() {
RestTemplate restTemplate = new RestTemplate();
String result = restTemplate.getForObject(BASE_URL, String.class);
System.out.println(result);
}
注意事项:
4xx/5xx 状态码会抛出异常,需要使用 ResponseErrorHandler 进行自定义错误处理。官方说明Spring 5.0以后处于维护模式,只修改bug,不再新增功能,推荐WebClient。
然而在Spring 6.1又推出了RestClient,升级简直不要太快!
admin4j/common-httpadmin4j/common-http 是 GitHub 上一个开源的 Java HTTP 客户端库。针对OKHttp框架 封装了OkHttpUtil工具类,使Http请求变得无比简单。
GitHub地址:github.com/admin4j/com…
案例
@Test
void okUtil() throws IOException {
Response r = HttpUtil.get(BASE_URL, new Pair<>());
if (r.isSuccessful() && r.body() != null) {
System.out.println(r.body().string());
} else {
System.out.println("请求失败: " + r.code());
}
}
注意事项:
OkHttp 或 Spring 的客户端,它的社区规模和生态成熟度可能稍逊一筹。你需要花费一些时间阅读其专属文档来了解所有特性。如果你厌倦了模板代码,希望用最简洁直观的方式完成HTTP通信,这个库都是非常好的选择。
Hutool的HttpUtilHttpUtil 是 Hutool工具库中的一个组件,它封装了基于 JDK 的 HttpURLConnection。其核心设计哲学是简化和便捷,通过静态方法提供了极其简单的 API,旨在用最少的代码完成最常见的 HTTP 请求任务,极大地提升了开发效率。
案例
@Test
void hutoolTest() {
String body = HttpUtil.get(BASE_URL);
System.out.println(body);
}
注意事项:
HttpUtil 的封装可能显得不够灵活。此时应选择更底层的库。HttpUtil 的静态方法内部会每次创建新的连接。对于需要复用连接的高性能场景,建议使用 HttpRequest 类,并进行相关配置OkHttp 或 Apache HttpClient,但 Hutool 在绝大多数场景下已经完全够用。快速原型开发、小型项目、内部工具脚本、测试代码的绝对首选。没有什么比它更快捷。
Spring6的RestClientSpring5 引入的响应式、非阻塞的 HTTP 客户端,是 RestTemplate 的现代化替代品。它是 Spring WebFlux 的一部分,支持异步和流处理,资源占用更少,并发能力更强。
RestClient 是 Spring Framework 6.1 引入的一个新的同步 HTTP 客户端。它采用了现代 fluent API(链式调用)设计,底层可以基于 WebClient 的非阻塞引擎,也可以适配其他HTTP库(如JDK HttpClient)。它的目标是提供一种简单、直观且强大的方式来执行同步HTTP请求,是 RestTemplate 的官方继任者。
这里我们以RestClient为例。
案例
@Test
void webclientTest() {
String body = RestClient.create(BASE_URL)
.get()
.retrieve()
.body(String.class);
System.out.println(body);
}
注意事项:
Spring Framework 6.1.0 或更高版本。对应 Spring Boot 3.2.0 或更高版本。.onStatus() 方法来针对特定的HTTP状态码提供自定义处理逻辑,比 RestTemplate 的异常处理更加清晰和灵活。WebClient),这意味着它可以在响应式环境中高效运行,而使用者无需改变编程范式。API 设计:API 设计与 WebClient 非常相似,降低了在同步和异步客户端之间切换的学习成本。如果你正在开始一个新项目,并且不想使用响应式编程模型,RestClient 是最官方、最现代的选择。
Java生态中HTTP客户端选择丰富,各有千秋。Spring开发者首选**RestClient(同步)与WebClient**(异步);追求轻量与性能可选**OkHttp;极致开发效率推荐国产神器Hutool与admin4j/common-http;而复杂企业级场景仍可依赖老牌Apache HttpClient**。
这6款优秀的Http客户端神奇,助你根据项目需求精准选型,高效完成网络请求任务,总有一款适合你。