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

阿里巴巴网站费用怎么做分录烟台企业展厅设计

阿里巴巴网站费用怎么做分录,烟台企业展厅设计,开发 app,做视频网站带宽不够怎么办第11章 🛠️Hutool 常用工具类 Hutool 是一款非常流行的 Java 工具类库,它的目标是减少项目中重复的工具代码,让开发更专注于业务逻辑,写出高效且优雅的代码。下面我用笔记的形式为你介绍 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://www.dtcms.com/a/398126.html

相关文章:

  • ZooKeeper与Kafka分布式协调系统实战指南:从基础原理到集群部署
  • lesson66:JavaScript BOM与DOM全解析:从基础到现代前端实践引言:前端开发的两大基石
  • UNIAPP如何自定义全局方法?
  • 040 线程控制
  • 前端开发利器:nvm、npm与pnpm全面解析与TypeScript/JavaScript选择指南
  • 电影网站如何做seo哪家网站建设公司好
  • LeetCode 刷题【90. 子集 II】
  • Spring Boot启动报错:Failed to configure a DataSource 全面解析与解决方案
  • MongoDB源码delete分析观察者getOpObserver()->onDelete
  • 企业网站模板htmlwordpress cos 配置
  • ACL 2025 Time-LlaMA 大语言模型高效适配时间序列预测
  • 2025开发者云服务器评测:AWS, Vercel, Railway该如何选?
  • 金融数据库--下载全市场股票日线行情数据
  • HTML `<meter>` 标签:原生度量衡指示器,直观展示百分比、评分等量化数据
  • 平安养老险广西分公司 | 开展金融知识公益宣教活动
  • 威海北京网站建设怎么做网站推广世界杯
  • php的网站模板下载如何修改自己的网站标题
  • VS Code 格式化配置优先级与作用机制(不含ESlint)
  • python+springboot+uniapp微信小程序“美好食荐”系统 美食推荐 菜谱展示 用户互动 评论收藏系统
  • 微信小程序页面滚动到指定位置
  • 抢占2025SEO先机:九大趋势洞察与实战行动路线图
  • Ubuntu 安装 Maven 私服 Nexus
  • maven install和package 有什么区别
  • 关于maven编译没把resources资源包含进target目录
  • 网站开发文档合同wap712c
  • [Maven 基础课程]11_Windows 安装 Maven 私服 Nexus
  • LinuxC++项目开发日志——基于正倒排索引的boost搜索引擎(3——通过cppjieba库建立索引模块)
  • 早报库|深圳奔向全球“消费级3D打印第一城”;苹果持续扩招增材制造人才;乌军前线大量使用3D打印地雷
  • 爬虫数据存储:MongoDB 在电商采集中的应用
  • 【STM32项目开源】STM32单片机厨房安全监测系统系统