当前位置: 首页 > news >正文

第11章 [特殊字符]️Hutool 常用工具类

第11章 🛠️Hutool 常用工具类

Hutool 是一款非常流行的 Java 工具类库,它的目标是减少项目中重复的工具代码,让开发更专注于业务逻辑,写出高效且优雅的代码。下面我用笔记的形式为你介绍 Hutool 中几个常用的工具类,特别是 HTTP 客户端工具,并用简单易懂的方式解释。

1. 什么是 Hutool?

Hutool 是一个 Java 工具类库,提供了很多静态方法封装,覆盖了字符串处理、日期时间操作、加密解密、文件处理、集合处理、HTTP 请求等方方面面。它的理念是 “小而全”,旨在简化 Java 开发中的各种常见操作。

2. 安装 Hutool

在 Maven 项目的 pom.xml 中添加以下依赖即可引入 Hutool:

<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.10</version> <!-- 请留意官网最新版本 -->
</dependency>

3. 常用工具类速览

工具类主要用途一句话描述
StrUtil字符串处理让字符串操作(判空、格式化、拆分等)更简单高效
CollUtil集合操作轻松玩转 List、Map 等集合的各种操作
JSONUtilJSON 处理Java 对象和 JSON 字符串之间的无缝转换
ObjectUtil对象操作安全地进行对象判空、克隆、比较等操作
HttpUtilHTTP 客户端工具用极简的代码完成 HTTP 请求,支持 GET/POST/文件上传下载等

4. 核心工具类详解

4.1 字符串工具 (StrUtil)

StrUtil 提供了比 Java 原生 String 更友好、更强大的字符串操作方法。

import cn.hutool.core.util.StrUtil;// 1. 判空(比原生更友好,空字符串和null都视为空)
String str = "test";
boolean isEmpty = StrUtil.isEmpty(str); // true if null or ""
boolean isNotEmpty = StrUtil.isNotEmpty(str);
boolean isBlank = StrUtil.isBlank(" "); // true (只包含空白字符也算"空")// 2. 格式化字符串(类似 Slf4j)
String template = "这只是个占位符:{}";
String str2 = StrUtil.format(template, "我是占位符"); // "这只是个占位符:我是占位符"// 3. 拆分字符串
String[] parts = StrUtil.split("a,b,c", ","); // ["a", "b", "c"]
List<String> partList = StrUtil.splitTrim("a, b , c", ","); // ["a", "b", "c"] (自动去除空白)// 4. 去除前缀/后缀
String fileName = StrUtil.removeSuffix("pretty_girl.jpg", ".jpg"); // "pretty_girl"
String fileNameWithoutPrefix = StrUtil.removePrefix("a.jpg", "a."); // "jpg"// 5. 字符串颠倒
String reversed = StrUtil.reverse("abcd"); // "dcba"

4.2 集合工具 (CollUtil)

CollUtil 让集合操作变得非常方便,尤其适合处理常见的 List 和 Map 操作。

import cn.hutool.core.collection.CollUtil;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.HashMap;// 1. 快速创建集合
List<String> list = CollUtil.newArrayList("A", "B", "C");
Map<String, Integer> map = CollUtil.newHashMap("key1", 1, "key2", 2);// 2. 集合判空
boolean isEmpty = CollUtil.isEmpty(list); // false
boolean isNotEmpty = CollUtil.isNotEmpty(list); // true// 3. 集合分组(每2个一组)
List<List<String>> group = CollUtil.split(list, 2); // [["A", "B"], ["C"]]// 4. 过滤空值
List<String> listWithNull = Arrays.asList("A", null, "C");
List<String> filtered = CollUtil.filter(listWithNull, Objects::nonNull); // ["A", "C"]// 5. 连接集合元素
String joinedStr = CollUtil.join(list, ","); // "A,B,C"

4.3 JSON 工具 (JSONUtil)

JSONUtil 提供了非常简单的 API 来处理 JSON 和 Java 对象之间的转换。

import cn.hutool.json.JSONUtil;
import java.util.List;
import java.util.Map;// 1. 对象转 JSON 字符串
User user = new User("Alice", 30);
String jsonStr = JSONUtil.toJsonStr(user); // {"name":"Alice","age":30}// 2. JSON 字符串转对象
String jsonString = "{\"name\":\"Alice\",\"age\":30}";
User userFromJson = JSONUtil.toBean(jsonString, User.class);// 结果是一个map
JSONObject jsonObject = JSONUtil.parseObj(result);
// 判断接口响应是否出错
if(ObjectUtil.isNotEmpty(jsonObject.getInt("errcode"))) {throw new RuntimeException(jsonObject.getStr("errmsg"));
}String openid = jsonObject.getStr("openid");// 3. List 转 JSON 数组
List<User> userList = Arrays.asList(new User("Alice", 30), new User("Bob", 25));
String listJson = JSONUtil.toJsonStr(userList); // [{"name":"Alice","age":30}, {"name":"Bob","age":25}]// 4. JSON 数组转 List
String jsonArray = "[{\"name\":\"Alice\",\"age\":30}, {\"name\":\"Bob\",\"age\":25}]";
List<User> users = JSONUtil.toList(jsonArray, User.class);// 5. JSON 字符串转 Map
String jsonStr = "{\"name\":\"Alice\",\"age\":30}";
Map<String, Object> map = JSONUtil.toBean(jsonStr, Map.class);

4.4 对象工具 (ObjectUtil)

ObjectUtil 提供了对象的基本操作,如判空、比较、克隆等。

import cn.hutool.core.util.ObjectUtil;// 1. 对象判空
Object obj = null;
boolean isEmpty = ObjectUtil.isEmpty(obj); // true
boolean isNotEmpty = ObjectUtil.isNotEmpty(obj); // false// 2. 判断对象是否相等(安全地处理 null)
Object a = "hello";
Object b = "hello";
boolean isEqual = ObjectUtil.equal(a, b); // true// 3. 获取对象类型
Class<?> type = ObjectUtil.getType(a); // class java.lang.String// 4. 克隆对象(需要实现 Serializable 接口)
User original = new User("Alice", 30);
User cloned = ObjectUtil.clone(original);

4.5 HTTP 客户端工具 (HttpUtil)

HttpUtil 是 Hutool 对 JDK 原生 HttpURLConnection 的封装,让你用极简的代码完成各种 HTTP 请求,无需引入其他依赖。

4.5.1 发送 GET 请求
import cn.hutool.http.HttpUtil;// 最简单的 GET 请求
String result1 = HttpUtil.get("https://api.example.com/data");// 带参数的 GET 请求 (方式1: 拼接URL)
String result2 = HttpUtil.get("https://api.example.com/data?name=张三&age=18");// 带参数的 GET 请求 (方式2: 使用Map)
HashMap<String, Object> paramMap = new HashMap<>();
paramMap.put("name", "张三");
paramMap.put("age", 18);
String result3 = HttpUtil.get("https://api.example.com/data", paramMap);
4.5.2 发送 POST 请求
// 发送简单 POST 请求 (提交字符串内容)
String result1 = HttpUtil.post("https://api.example.com/submit", "这是一段内容");// 发送表单 POST 请求 (类似 HTML 表单)
HashMap<String, Object> paramMap = new HashMap<>();
paramMap.put("username", "admin");
paramMap.put("password", "123456");
String result2 = HttpUtil.post("https://api.example.com/login", paramMap);// 发送 JSON 数据 (常用 RESTful API)
HashMap<String, Object> jsonMap = new HashMap<>();
jsonMap.put("title", "Hello");
jsonMap.put("body", "This is a post.");
String jsonStr = JSONUtil.toJsonStr(jsonMap); // 先用 JSONUtil 将 Map 转为 JSON 字符串// 使用 HttpRequest (更灵活)
String result3 = HttpRequest.post("https://api.example.com/posts").header("Content-Type", "application/json") // 设置请求头.body(jsonStr).timeout(20000) // 设置超时时间(毫秒).execute().body();
4.5.3 文件下载与上传
// 文件下载 (简单版)
long size = HttpUtil.downloadFile("https://example.com/file.zip", new File("local.zip"));// 文件下载 (带进度监听)
HttpUtil.downloadFile("https://example.com/bigfile.zip", FileUtil.file("local.zip"), new StreamProgress() {@Overridepublic void start() {System.out.println("开始下载...");}@Overridepublic void progress(long progressSize) {System.out.println("已下载: " + progressSize + " bytes");}@Overridepublic void finish() {System.out.println("下载完成!");}
});// 文件上传
HashMap<String, Object> uploadMap = new HashMap<>();
uploadMap.put("file", FileUtil.file("path/to/your/photo.jpg")); // 指定要上传的文件
String uploadResult = HttpUtil.post("https://api.example.com/upload", uploadMap);
4.5.4 处理响应和高级配置
// 获取更详细的响应信息
HttpResponse response = HttpRequest.get("https://api.example.com/data").timeout(5000) // 设置超时.setProxy("127.0.0.1", 8888) // 设置代理 (如需).execute();int statusCode = response.getStatus(); // 获取状态码, 如 200
String contentType = response.header("Content-Type"); // 获取响应头
String body = response.body(); // 获取响应体// 错误处理
try {HttpResponse response = HttpRequest.get("https://api.example.com/data").timeout(20000).execute();if (response.isOk()) { // 检查请求是否成功 (状态码 200)String result = response.body();// 处理成功结果} else {// 处理服务器返回的错误 (如 404, 500)System.out.println("请求失败,状态码: " + response.getStatus());}
} catch (HttpException e) {// 处理网络异常 (如超时、连接失败)e.printStackTrace();
}

5. 实战案例:整合使用多个工具类

下面是一个综合使用多个 Hutool 工具类的实际例子:

/*** 获取openid* @param code* @return*/
@Override
public String getOpenid(String code) {// 获取公共参数Map<String,Object> paramMap = getAppConfig();paramMap.put("js_code", code);String result = HttpUtil.get(REQUEST_URL, paramMap);// 结果是一个mapJSONObject jsonObject = JSONUtil.parseObj(result);// 判断接口响应是否出错if(ObjectUtil.isNotEmpty(jsonObject.getInt("errcode"))) {throw new RuntimeException(jsonObject.getStr("errmsg"));}String openid = jsonObject.getStr("openid");return openid;
}

6. 学习建议

  1. 多看文档:Hutool 的官方文档非常详细,遇到问题首先查阅文档。
  2. 动手实践:在项目中积极尝试使用 Hutool 的工具类来替代自己编写的工具方法。
  3. 由简入繁:先从最常用的 StrUtil, CollUtil, JSONUtilHttpUtil 开始,逐步扩展到其他模块。
  4. 注意版本:不同版本的 Hutool 方法可能会有差异,注意查看对应版本的文档。

Hutool 就像一把瑞士军刀,能极大提升你的 Java 开发效率和幸福感。希望这篇笔记能帮你快速上手!


文章转载自:

http://xwdk88mA.kxsnp.cn
http://8uEnd3Gn.kxsnp.cn
http://KO3kchh2.kxsnp.cn
http://I80Qr4d3.kxsnp.cn
http://OSqCczWa.kxsnp.cn
http://DBN8bfRP.kxsnp.cn
http://vQCUGgaS.kxsnp.cn
http://zySBDEbt.kxsnp.cn
http://Wv4cvoXh.kxsnp.cn
http://zCxa3xur.kxsnp.cn
http://NCJk3rGK.kxsnp.cn
http://hTm26vHi.kxsnp.cn
http://hgxZlSEI.kxsnp.cn
http://BCI4Vf5c.kxsnp.cn
http://bymKm2pO.kxsnp.cn
http://MOaTiYQC.kxsnp.cn
http://xPqi80wJ.kxsnp.cn
http://aJdzOgLD.kxsnp.cn
http://YoggSnbV.kxsnp.cn
http://ojjj3PDR.kxsnp.cn
http://Ywd4EKmx.kxsnp.cn
http://HjnyF68I.kxsnp.cn
http://fMP75i5d.kxsnp.cn
http://TzRr26mc.kxsnp.cn
http://DabXSWOi.kxsnp.cn
http://i6WxwWDi.kxsnp.cn
http://mNscoSN6.kxsnp.cn
http://DyQvjW1q.kxsnp.cn
http://Y1r1ey0P.kxsnp.cn
http://Zhhb09aP.kxsnp.cn
http://www.dtcms.com/a/386255.html

相关文章:

  • 【MySQL|第十篇】总结篇——各种命令集合
  • npm : 无法加载文件 d:\nvm4w\nodejs\npm.ps1,
  • 贪心算法应用:活动选择问题详解
  • C++ 模板:以简御繁-5/5
  • AI大模型学习(6)Yolo V8神经网络的基础应用
  • 【完整源码+数据集+部署教程】残疾人和正常人识别图像分割系统: yolov8-seg-act
  • 深度学习:从概念到实践,开启智能时代新篇章
  • 构建AI智能体:三十五、决策树的核心机制(一):刨根问底鸢尾花分类中的参数推理计算
  • 美创科技入选 2025 年度省级场景型数字化服务商!
  • 《COD21》新赛季海量更新:《忍者神龟》联动上线!
  • RuoYi框架Excel静态模板下载例子Demo
  • 【系列文章】Linux系统中断的应用02-中断下文 tasklet
  • GPT-5-Codex 模型评测报告
  • MAZANOKE+cpolar让照片存储无上限
  • (笔记)Linux系统设置虚拟内存
  • Kotlin-基础语法练习三
  • windows上Redis Desktop Manager链接服务器docker内Redis方法
  • jMeter小记-数组数据X_id集合获取及循环控制器使用调用数组数据X_id
  • 迁移指南:从旧版 Electron 升级
  • Node.js中的 http 模块详解
  • 设置powershell每次打开自动启动anaconda中自设环境
  • keil5和arm编译器安装
  • 【初阶数据结构】顺序表
  • 外媒称Switch2手柄鼠标功能 将彻底改变玩游戏的方式
  • 【Spring Cloud】微服务
  • 设计模式(Java实现)----建造者模式
  • C++设计模式_创建型模式_建造者模式Builder
  • Dell PowerEdge R620 服务器内存和硬盘罢工了
  • 儿童无屏幕对讲机 Bunny 融资百万美元;腾讯会议推出 AI 托管:先行听会、代听多会、全程记录丨日报
  • linux系统命令学习