本文最后更新于42 天前,其中的信息可能已经过时,如有错误请发送邮件到2032978506@qq.com
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
public void testHttpClient() throws Exception {
//创建HttpClient对象
CloseableHttpClient httpClient = HttpClients.createDefault();
//创建请求对象
HttpGet httpGet =new HttpGet("http://localhost:8080/user/shop/status");
//调用HttpClient的execute方法发送请求
CloseableHttpResponse response = httpClient.execute(httpGet);
//获取服务端返回的状态码
int statusCode = response.getStatusLine().getStatusCode();
System.out.println(statusCode);
//响应体
HttpEntity entity = response.getEntity();
//用EntityUtils来解析响应体
String body = EntityUtils.toString(entity);
System.out.println("服务端返回的数据为:"+body);
//关闭资源
response.close();
httpClient.close();
}
返回的结果就和响应给前端的响应数据一样
HttpPost
public void testHttpClientPost() throws Exception {
//创建HttpClient对象
CloseableHttpClient httpClient = HttpClients.createDefault();
//创建请求对象
HttpPost httpPost =new HttpPost("http://localhost:8080/admin/employee/login");
JSONObject jsonObject = new JSONObject();
jsonObject.put("username","admin");
jsonObject.put("password","123456");
StringEntity entity = new StringEntity(jsonObject.toString());
//指定请求编码方式
entity.setContentEncoding("utf-8");
//数据格式
entity.setContentType("application/json");
httpPost.setEntity(entity);
//发送请求
CloseableHttpResponse response = httpClient.execute(httpPost);
//获取服务端返回的状态码
int statusCode = response.getStatusLine().getStatusCode();
System.out.println("响应码为:"+statusCode);
//响应体
HttpEntity entity1 = response.getEntity();
//用EntityUtils来解析响应体
String body = EntityUtils.toString(entity1);
System.out.println("服务端响应的数据为:"+body);
//关闭资源
response.close();
httpClient.close();
}
也就比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 操作 |