简介
官方文档:Hutool参考文档
不要问Hutool有什么,而是它什么都有,Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。
举个栗子:
计算md5
以前:打开百度 -> 搜“Java MD5加密” -> 打开某篇博客-> 复制粘贴 -> 改改好用
现在:引入Hutool->SecureUtil.md5()
🛠️ 包含的组件
一个Java基础工具类,对文件、流、加密解密、转码、正则、线程、XML等JDK方法进行封装,组成各种Util工具类,同时提供以下组件:
模块 | 介绍 |
---|---|
hutool-aop | JDK动态代理封装,提供非IOC下的切面支持 |
hutool-bloomFilter | 布隆过滤,提供一些Hash算法的布隆过滤 |
hutool-cache | 简单缓存实现 |
hutool-core | 核心,包括Bean操作、日期、各种Util等 |
hutool-cron | 定时任务模块,提供类Crontab表达式的定时任务 |
hutool-crypto | 加密解密模块,提供对称、非对称和摘要算法封装 |
hutool-db | JDBC封装后的数据操作,基于ActiveRecord思想 |
hutool-dfa | 基于DFA模型的多关键字查找 |
hutool-extra | 扩展模块,对第三方封装(模板引擎、邮件、Servlet、二维码、Emoji、FTP、分词等) |
hutool-http | 基于HttpUrlConnection的Http客户端封装 |
hutool-log | 自动识别日志实现的日志门面 |
hutool-script | 脚本执行封装,例如Javascript |
hutool-setting | 功能更强大的Setting配置文件和Properties封装 |
hutool-system | 系统参数调用封装(JVM信息等) |
hutool-json | JSON实现 |
hutool-captcha | 图片验证码实现 |
hutool-poi | 针对POI中Excel和Word的封装 |
hutool-socket | 基于Java的NIO和AIO的Socket封装 |
hutool-jwt | JSON Web Token (JWT)封装实现 |
当然可以根据需求对每个模块单独引入,也可以通过引入hutool-all
方式引入所有模块。
📦引入Hutool
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.16</version>
</dependency>
🍑常用模块
1.HTTP客户端
1.1http工具类
GET请求栗子:
// 最简单的HTTP请求,可以自动通过header等信息判断编码,不区分HTTP和HTTPS
String result1= HttpUtil.get("https://www.baidu.com");
// 当无法识别页面编码的时候,可以自定义请求页面的编码
String result2= HttpUtil.get("https://www.baidu.com", CharsetUtil.CHARSET_UTF_8);
//可以单独传入http参数,这样参数会自动做URL编码,拼接在URL中
HashMap<String, Object> paramMap = new HashMap<>();
paramMap.put("city", "北京");
String result3= HttpUtil.get("https://www.baidu.com", paramMap);
POST请求栗子:
HashMap<String, Object> paramMap = new HashMap<>();
paramMap.put("city", "北京");
String result= HttpUtil.post("https://www.baidu.com", paramMap);
1.2HTTP请求-HttpRequest
//普通表单--以post请求为例
String url= "";
String signature = "";
HttpRequest.post(url).header("X-SIGNATURE",signature)//头信息,多个头信息多次调用此方法即可
.form("","")//表单内容
.timeout(20000)//超时,毫秒
.execute().body();
//restful请求
String json = ...;
String result2 = HttpRequest.post(url)
.body(json)
.execute().body();
1.3HTTP请求-HttpResponse
在调用三方api时需要获取到相应的响应信息
String url = "";
HttpResponse res = HttpRequest.post(url).body("根据需求传入对应的数据").header("","")
.execute();
//获取响应状态码
int status = res.getStatus();
//获取响应数据请求头参数
String name = res.header("参数名");
//获取响应体
String body = res.body();
2.信息脱敏
Hutool目前支持的脱敏数据有:用户id,中文姓名,身份证号,座机号,手机号,地址,电子邮件,密码,中国大陆车牌,银行卡
举个栗子:
//身份证信息
String s1 = DesensitizedUtil.idCardNum("51343620000320711X", 2, 2);
//s = 51**************1X;
//手机号码
String s2 = DesensitizedUtil.mobilePhone("18049531999");
//s2 = 180****1999
//密码,只保留*号
String s3 = DesensitizedUtil.password("1234567890");
// s3 = **********
//银行卡号
String s4 = DesensitizedUtil.bankCard("银行卡号");
//s4 = 6214 **** **** 5612
......
这里就不一 一举例了
3.JSON工具-JSONUtil
对象,map转为JSON格式的字符串
如果传入的map是有序的,那么解析出来的JSON字符串也将是有序的
HashMap<String, String> map = new HashMap<>();
map.put("name","张三");
map.put("age","88");
map.put("intro","爱打飞机");
User user = new User("李四", "99", "吃");
System.out.println("map:"+JSONUtil.toJsonStr(map));
System.out.println("对象:"+JSONUtil.toJsonStr(user));
输出:
map:{"intro":"爱打飞机","name":"张三","age":"88"}
对象:{"name":"李四","age":"99","intro":"吃"}
JSONobject转换为对象
String jsonStr = "{\"intro\":\"爱打飞机\",\"name\":\"张三\",\"age\":\"88\"}";
User user = JSONUtil.toBean(jsonStr, User.class);
System.out.println(user);
输出:User(name=张三, age=88, intro=爱打飞机)
格式化JSON字符串:
String jsonStr = "{\"intro\":\"爱打飞机\",\"name\":\"张三\",\"age\":\"88\"}";
String s = JSONUtil.toJsonPrettyStr(jsonStr);
System.out.println(s)
输出:
{
"intro": "爱打飞机",
"name": "张三",
"age": "88"
}
还有一些常用的方法:
// 将JSON字符串解析为JSONObject对象
JSONObject jsonObject = JSONUtil.parseObj(jsonString);
// 将JSONObject对象转换为指定类型的Java对象
YourClass yourClass = JSONUtil.toBean(jsonObject, YourClass.class);
// 将Java对象转换为JSONObject对象
JSONObject jsonObject = JSONUtil.parseObj(yourObject);
// 获取JSON中指定路径的值
Object value = JSONUtil.getByPath(jsonObject, "path.to.value");
// 设置JSON中指定路径的值
JSONUtil.putByPath(jsonObject, "path.to.value", value);
// 删除JSON中指定路径的值
JSONUtil.delByPath(jsonObject, "path.to.value");