官网:https://www.hutool.cn/
官方文档:https://www.hutool.cn/docs/#/
官方API文档:https://www.hutool.cn/docs/#/
GitHub:https://github.com/dromara/hutool/
目录
-
- 1.简介
- 2.Maven坐标
- 3.常用功能
-
- 1)发送请求
- 2)深度克隆
- 3)资源操作
- 4)IO流工具
- 5)反射工具
- 6)ID工具
- 7)命令行工具
- 8)身份证工具
- 9)单例工具
- 10)高并发测试工具
- 11)定时过期缓存工具
- 12)MD5加密
- 13)邮件工具
- 14)二维码工具
1.简介
- Hutool是Hu + tool的自造词,谐音“糊涂”。
- Hutool是一个Java工具包,帮助我们简化每一行代码。
- Hutool的存在就是为了减少代码搜索成本,避免网络上参差不齐的代码出现导致的bug。
2.Maven坐标
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.6.3</version>
</dependency>
下面推荐几个我认为比较好用的用法:
3.常用功能
1)发送请求
HttpUtil发送请求
//GET请求
String content = HttpUtil.get(url);
//POST请求
HashMap<String, Object> paramMap = new HashMap<>();
paramMap.put("city", "北京");
String result1 = HttpUtil.post(url, paramMap);
HttpRequest发送请求
@Test
public void test1() {
//1. 组建请求json参数
JSONObject json = new JSONObject();
json.set("type", 1);
String[] childrenId = new String[] {"132"};
json.set("childrenIds", childrenId);
String url=" http://localhost:8081/test";
/*2. 发送post请求并接收响应数据
采用的是一种叫链式编程的方式):
header对应的是请求头。
body对应的是请求体(包含参数和参数值)。
HttpRequest里面包含Post、GET、Delete、Put等常用的RestFul方式。*/
String post = HttpRequest.post(url)
.header("key","2e351b12c5030")
.header("sign","ee29e949d8c480a67e61e7921ac2dce7")
.body(json.toString())
.execute().body();
System.out.println(post);
}
执行结果:
2)深度克隆
// 深度克隆
ObjectUtil.cloneByStream(obj);
3)资源操作
// 读取`src/resources/config/test.xml` 文件内容(流读取,打成jar包仍然可用)
InputStream in = ResourceUtil.getStream("config/test.xml");
4)IO流工具
// 根据流读取文件内容
String content = IoUtil.read(in, "GBK");
5)反射工具
// 获取某个类的所有方法
Method[] methods = ReflectUtil.getMethods(ExamInfoDict.class);
// 获取某个类的指定方法
Method method = ReflectUtil.getMethod(ExamInfoDict.class, "getId");
// 构造对象
ReflectUtil.newInstance(ExamInfoDict.class);
// 执行方法
ReflectUtil.invoke(testClass, "setA", 10);
6)ID工具
// 生成随机的不带-的UUID
String uuid = IdUtil.simpleUUID();
// 雪花算法
// 终端ID, 数据中心ID
Snowflake snowflake = IdUtil.getSnowflake(1, 1);
long id = snowflake.nextId();
7)命令行工具
// 调用控制台,执行命令行
String str = RuntimeUtil.execForStr("ipconfig");
8)身份证工具
// 验证身份证是否有效
boolean isValid = IdcardUtil.isValidCard("321083197812162119");
9)单例工具
// 每次取出的均为同一单例
Dog dog = Singleton.get(Dog.class);
10)高并发测试工具
@Test
void test() {
AtomicInteger integer = new AtomicInteger();
ConcurrencyTester tester = ThreadUtil.concurrencyTest(100, () -> {
// 测试的逻辑内容,例如:并发请求
JSONObject json = new JSONObject();
json.set("id", "2");
String url="http://localhost:8081/module/detail";
HttpRequest.post(url).body(json.toString()).execute();
Console.log("{} request finished, index: {}", Thread.currentThread().getName(), integer.incrementAndGet());
});
// 获取总的执行时间,单位毫秒
Console.log("总执行次数: {}, 耗时: {}", integer.get(), tester.getInterval() + "ms");
}
注意:这个工具只能在@Test单元测试中执行,在main方法中会导致线程挂起等待。
11)定时过期缓存工具
//创建缓存,默认4毫秒过期
TimedCache<String, String> timedCache = CacheUtil.newTimedCache(4);
// 默认5秒过期
TimedCache<String, String> timedCache2 = CacheUtil.newTimedCache(DateUnit.SECOND.getMillis() * 5);
// 存
timedCache.put("key1", "value1", 1);//1毫秒过期
timedCache.put("key3", "value3");//默认过期(4毫秒)
// 取
String value1 = timedCache.get("key1");
String value2 = timedCache.get("key1", false); // 不刷新过期时间
注意:访问会刷新时间,如果不想刷新时间,调用get(Object, false)。
12)MD5加密
// MD5加密
String s = SecureUtil.md5("123");
13)邮件工具
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
在
src/resources
目录下创建 mail.setting 文件:
# 发件人(必须正确,否则发送失败)
from = [email protected]
# 密码(注意,某些邮箱需要为SMTP服务单独设置密码,详情查看相关帮助)
pass = q1w2e3
// 发送邮件
MailUtil.send("[email protected]", "测试", "邮件来自Hutool测试", false);
// 带附件
MailUtil.send("[email protected]", "测试", "邮件来自Hutool测试", false, new File(""));
14)二维码工具
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.3.3</version>
</dependency>
// 生成指定url对应的二维码到文件,宽和高都是300像素
QrCodeUtil.generate("https://acgkaka.github.io/", 300, 300, FileUtil.file("d:/qrcode.jpg"));
二维码成果:
就整理这么多,更多工具参考官方文档:https://www.hutool.cn/docs/#/
谢谢观看,完结撒花~