HttpClient 介绍
HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。
HttpClient 作用:
- 发送 HTTP 请求
- 接收响应数据
为什么要在 Java 程序中发送 Http 请求?有哪些应用场景呢?
HttpClient 应用场景:
当我们在使用扫描支付、查看地图、获取验证码、查看天气等功能时
HttpClient 的核心 API:
- HttpClient:Http 客户端对象类型,使用该类型对象可发起 Http 请求。
- HttpClients:可认为是构建器,可创建 HttpClient 对象。
- CloseableHttpClient:实现类,实现了 HttpClient 接口。
- HttpGet:Get 方式请求类型。
- HttpPost:Post 方式请求类型。
HttpClient 发送请求步骤:
- 创建 HttpClient 对象
- 创建 Http 请求对象
- 调用 HttpClient 的 execute 方法发送请求
初见时的疑惑:不是已经有 Controller 了吗?为什么还要有 HttpClient
解答:HttpClient 与 Controller 是完全不同的概念,HttpClient 是作为一个客服端主动发送请求的,而 Controller 是作为服务端被动接收请求并相应数据的
HttpClient 是 向外发起请求的工具(客户端行为),用于跨服务或第三方 API 调用。
Controller 是 接收并处理请求的入口(服务端行为),负责协调业务逻辑并返回响应。
二者在架构中分工明确,共同完成完整的 HTTP 交互闭环。
HttpClient 入门程序
实现步骤:
- 创建 HttpClient 对象
- 创建请求对象
- 发送请求,接收响应结果
- 解析响应结果
- 关闭资源
HttpGet
返回的结果就和响应给前端的响应数据一样
HttpPost
也就比 HttpGet 方法多了一个封装请求参数的步骤
Fastjson
导入依赖:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.83</version>
</dependency>
Fastjson 的核心功能
Fastjson 是阿里巴巴开发的 JSON 处理库,主打高性能(号称 “最快的 Java JSON 库”),支持直接操作 JSON 对象或通过注解绑定 Java 对象。
1. JSONObject
的用法
创建 JSON 对象:import com.alibaba.fastjson.JSONObject;
JSONObject obj = new JSONObject();
obj.put("name", "John");
obj.put("age", 30);
解析 JSON 字符串:
String jsonStr = "{\"name\":\"John\", \"age\":30}";
JSONObject obj = JSONObject.parseObject(jsonStr);
转换为 Java 对象:
User user = obj.toJavaObject(User.class); // 需定义 User 类
2. JSONArray
的用法
创建 JSON 数组:
JSONArray array = new JSONArray();
array.add("Apple");
array.add(100);
3. 对象序列化与反序列化
Fastjson 可以直接将 Java 对象与 JSON 互相转换:
// 序列化
User user = new User("John", 30);
String json = JSON.toJSONString(user);
// 反序列化
User user = JSON.parseObject(json, User.class);
三、Fastjson vs org.json
特性 | Fastjson | org.json |
---|---|---|
包名 | com.alibaba.fastjson | org.json |
性能 | 高性能(优化算法) | 一般 |
对象映射 | 支持自动序列化 / 反序列化(注解驱动) | 不支持,需手动操作 |
依赖 | 需引入 Fastjson 库 | 无依赖,轻量级 |
安全性 | 历史上有较多安全漏洞(需谨慎使用) | 相对简单,漏洞较少 |
使用场景 | 高性能需求、复杂对象映射 | 简单 JSON 操作 |