HttpClient
本文最后更新于 20 天前,其中的信息可能已经过时,如有错误请发送邮件到 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 入门程序

实现步骤:

  1. 创建 HttpClient 对象
  2. 创建请求对象
  3. 发送请求,接收响应结果
  4. 解析响应结果
  5. 关闭资源

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

特性 Fastjsonorg.json
包名com.alibaba.fastjsonorg.json
性能高性能(优化算法)一般
对象映射支持自动序列化 / 反序列化(注解驱动)不支持,需手动操作
依赖需引入 Fastjson 库无依赖,轻量级
安全性历史上有较多安全漏洞(需谨慎使用)相对简单,漏洞较少
使用场景高性能需求、复杂对象映射简单 JSON 操作

散々雨に降られたって 笑っていられる 即使被雨水淋湿也能笑着面对。----孤独摇滚
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇
午后很容易犯困呢,今天的运动目标完成了吗?