王国保卫战5苹果手机版
1G · 2025-10-14
前面有两期总共介绍了四款工具,调用第三方API
像调用接口一样丝滑。
dromara
的Forest
SpringCloud
的OpenFeign
Spring6
的@HttpExchange
retrofit-spring-boot-starter
这种方式需要保证项目能够启动起来才可以,在单元测试的时候,需要保证项目能够跑起来,才能从临时的Spring
容器中获取到客户端,然后调用。
但是,平时开发中为了方便测试,有时候就想像main
方法一样直接调用,不想调试本地的环境。
那今天就推荐几款工具库!
既然是工具,当然越方便越会受开发开发者喜爱。
Apache HttpClient
Apache
旗下的老牌、强大、灵活的 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
项目且不想引入额外依赖,它是一个可靠的选择。
OkHttp
Square
公司开源的现代、高效、轻量级的 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
的 RestTemplate
Spring 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-http
admin4j/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
的HttpUtil
HttpUtil
是 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
的RestClient
Spring5
引入的响应式、非阻塞的 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
(同步)与WebClien
t**(异步);追求轻量与性能可选**OkHttp
;极致开发效率推荐国产神器Hutool
与admin4j/common-http
;而复杂企业级场景仍可依赖老牌Apache HttpClient
**。
这6款优秀的Http
客户端神奇,助你根据项目需求精准选型,高效完成网络请求任务,总有一款适合你。