# tool
**Repository Path**: zhiyubujian/tool
## Basic Information
- **Project Name**: tool
- **Description**: 本工具包主要集成了目前在项目开发过程中个人经常会使用到的一些工具类,对工具类进行了一下简单的封装。工具包目前集成了通用响应实体、对象拷贝、集合转换、加密工具、格式化工具、随机中文、JSR校验、常用自定义异常、swagger-ui和驼峰转换等工具
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 9
- **Forks**: 4
- **Created**: 2018-07-26
- **Last Updated**: 2024-11-16
## Categories & Tags
**Categories**: Uncategorized
**Tags**: 开源
## README
# 快速启动
本工具包主要集成了目前在项目开发过程中个人经常会使用到的一些工具类,对工具类进行了一下简单的封装。该工具常用的工具有:
| 工具类路径 | 作用说明 |
| ------------------------------------------------------------ | :--------------------: |
| [com.yishuifengxiao.common.tool.bean](https://apidoc.gitee.com/zhiyubujian/tool/com/yishuifengxiao/common/tool/bean/package-summary.html) | java bean 操作工具|
| [com.yishuifengxiao.common.tool.collections](https://apidoc.gitee.com/zhiyubujian/tool/com/yishuifengxiao/common/tool/collections/package-summary.html) | java 集合操作工具 |
| [com.yishuifengxiao.common.tool.context](https://apidoc.gitee.com/zhiyubujian/tool/com/yishuifengxiao/common/tool/context/package-summary.html) | 数据存储工具 |
| [com.yishuifengxiao.common.tool.converter](https://apidoc.gitee.com/zhiyubujian/tool/com/yishuifengxiao/common/tool/converter/package-summary.html) | 数据转换工具 |
| [com.yishuifengxiao.common.tool.datetime](https://apidoc.gitee.com/zhiyubujian/tool/com/yishuifengxiao/common/tool/datetime/package-summary.html) | 日期时间工具 |
| [com.yishuifengxiao.common.tool.codec](https://apidoc.gitee.com/zhiyubujian/tool/com/yishuifengxiao/common/tool/encoder/package-summary.html) | 加解密工具 |
| [com.yishuifengxiao.common.tool.entity](https://apidoc.gitee.com/zhiyubujian/tool/com/yishuifengxiao/common/tool/entity/package-summary.html) | 基础通用对象 |
| [com.yishuifengxiao.common.tool.exception](https://apidoc.gitee.com/zhiyubujian/tool/com/yishuifengxiao/common/tool/exception/package-summary.html) | 自定义异常 |
| [com.yishuifengxiao.common.tool.exception.constant](https://apidoc.gitee.com/zhiyubujian/tool/com/yishuifengxiao/common/tool/exception/constant/package-summary.html) | 异常错误码常量 |
| [com.yishuifengxiao.common.tool.http](https://apidoc.gitee.com/zhiyubujian/tool/com/yishuifengxiao/common/tool/http/package-summary.html) | HTTP操作工具 |
| [com.yishuifengxiao.common.tool.io](https://apidoc.gitee.com/zhiyubujian/tool/com/yishuifengxiao/common/tool/io/package-summary.html) | IO流和文件操作工具 |
| [com.yishuifengxiao.common.tool.lang](https://apidoc.gitee.com/zhiyubujian/tool/com/yishuifengxiao/common/tool/lang/package-summary.html) | 常见数据类型的封装工具 |
| [com.yishuifengxiao.common.tool.log](https://apidoc.gitee.com/zhiyubujian/tool/com/yishuifengxiao/common/tool/log/package-summary.html) | 日志工具 |
| [com.yishuifengxiao.common.tool.random](https://apidoc.gitee.com/zhiyubujian/tool/com/yishuifengxiao/common/tool/random/package-summary.html) | 随机工具 |
| [com.yishuifengxiao.common.tool.sensitive](https://apidoc.gitee.com/zhiyubujian/tool/com/yishuifengxiao/common/tool/sensitive/package-summary.html) | 脱敏工具 |
| [com.yishuifengxiao.common.tool.utils](https://apidoc.gitee.com/zhiyubujian/tool/com/yishuifengxiao/common/tool/utils/package-summary.html) | 自定义工具 |
| [com.yishuifengxiao.common.tool.validate](https://apidoc.gitee.com/zhiyubujian/tool/com/yishuifengxiao/common/tool/validate/package-summary.html) | 自定义校验工具 |
工具包已经发布到maven中央仓库,使用方法如下:
```xml
com.yishuifengxiao.common
common-tool
4.3.0
```
最新版的版本号参见 [https://mvnrepository.com/artifact/com.yishuifengxiao.common/common-tool](https://mvnrepository.com/artifact/com.yishuifengxiao.common/common-tool)
工具类说明文档的地址为 [https://apidoc.gitee.com/zhiyubujian/tool/](https://apidoc.gitee.com/zhiyubujian/tool/)
# 一 Bean操作工具
## 1.1 对象转换工具
该工具的主要目的是将源对象转换为目标对象,其主要功能如下:
- 将源对象里属性值复制给目标对象
- 将Java对象序列化为二进制数据
- 将序列化化后的二进制数据反序列化为对象
工具路径:
```java
com.yishuifengxiao.common.tool.bean.BeanUtil
```
使用示例:
```java
CustomException e = new CustomException();
DataException ex = new DataException();
//将CustomException复制为DataException
// 第一个参数为源对象,第二个参数为目标对象
DataException copy = BeanUtil.copy(e, ex);
//将CustomException序列化为二进制数组
byte[] bytes = BeanUtil.objectToByte(e);
// 将转换后的二进制数据反序列化为对象
Object object = BeanUtil.byteToObject(bytes);
// 将转换后的二进制数据反序列化为指定的对象
CustomException exception = BeanUtil.byteToObject(bytes, CustomException.class);
```
# 二 集合操作工具
## 2.1 集合元素处理工具
该工具的主要目的是对集合进行处理,让用户在无须考虑NPE的情况下安全地操作集合。主要作用如下:
- 将集合转换成java8中的stream流
- 获取集合中的第一个元素
- 将数据转换成集合
- 安全地创建集合
工具路径:
```java
com.yishuifengxiao.common.tool.collections.DataUtil
```
使用示例:
```java
// 安全地创建集合,该方法与Arrays.asList不同,
// 创建出来的是ArrayList,可以放心地对创建出来的list进行各种操作
//List list = Arrays.asList("a", "b", "c", "d");
List list = DataUtil.asList("a", "b", "c", "d");
//将集合转换成并行流
Stream parallelStream = DataUtil.parallelStream(list);
//将集合转换成串行流
Stream stream = DataUtil.stream(list);
// 获取集合的第一个元素
String first = DataUtil.first(list);
//将数组转换成集合
String[] strs = {"a", "b", "c", "d"};
List asList = DataUtil.asList(strs);
```
## 2.2 空集合判断工具
该工具的主要目的在于快速地判断一个集合是否为空集合或者为NULL。其主要作用如下:
- 判断集合是否为空
- 判断分页对象是否为空
- 判断集合是否仅有一个元素
工具路径:
```java
com.yishuifengxiao.common.tool.collections.CollUtil
```
使用示例:
```java
//判断改分页对象是否为空或者null
Page page = Page.empty();
boolean empty = EmptyUtil.isEmpty(page);
//判断该集合是否为空或者null
List list = new ArrayList<>();
boolean empty1 = EmptyUtil.isEmpty(list);
//判断该集合是否仅有一个元素
boolean onlyOneElement = EmptyUtil.onlyOneElement(list);
```
## 2.3 字典链式构建工具
该工具的主要目的是能通过链式方法快速地构建一个字典对象。
工具路径:
```java
com.yishuifengxiao.common.tool.collections.MapUtil
```
使用示例:
```java
Map map = MapUtil.instance().put("k1", "v1").
put("k2", "v2").put("k3", "v3").build();
```
# 三 日期时间工具
## 3.1 Date时间工具
该工具主要是基于`java.util.Date`实现的日期时间获取工具,其主要作用如下:
- 获取今天的开始时间点(00:00:00)
- 获取昨天的开始时间点(00:00:00)和结束时间点(23:59:59)
- 获取前天的开始时间点(00:00:00)
- 获取7天前的那个时间的开始时间点(00:00:00)
- 获取14天前的那个时间的开始时间点(00:00:00)
- 获取本周一的那个时间的开始时间点(00:00:00)
- 获取上周一的那个时间的开始时间点(00:00:00)
- 获取过去指定时间的那个时间的开始时间点(00:00:00)
- 获取本月1号的那个时间的开始时间点(00:00:00)
- 获取过去指定月份的那个月份的1号的开始时间点(00:00:00)
- 获取过去指定年份的那个时间的1月1号的那个时间的开始时间点(00:00:00)
工具路径:
```java
com.yishuifengxiao.common.tool.datetime.DateOffsetUtil
```
使用示例:
```java
//今天的开始时间(今天的00:00:00)
Date todayStart = DateOffsetUtil.todayStart();
//获取昨天的开始时间(昨天的00:00:00)
Date yesterdayStart = DateOffsetUtil.yesterdayStart();
//获取昨天的结束时间(昨天的23:59:59)
Date yesterdayEnd = DateOffsetUtil.yesterdayEnd();
//获取前天的开始时间(前天的00:00:00)
Date last2DayStart = DateOffsetUtil.last2DayStart();
//获取7天前那一天0时0分0秒这个时间(七天前的00:00:00)
Date last7DayStart = DateOffsetUtil.last7DayStart();
//获取本周一的开始时间(本周一的00:00:00)
Date mondayStart = DateOffsetUtil.mondayStart();
//获取本月的开始时间(本月1号的00:00:00)
Date monthStart = DateOffsetUtil.monthStart();
//获取1个月前的那个月的开始时间(1个月前的那个月的00:00:00)
Date monthStart1 = DateOffsetUtil.monthStart(1);
```
## 3.2 LocalDateTime时间工具
该工具主要是基于`java.time.LocalDateTime`实现的日期时间获取工具,其主要作用如下:
- 获取今天的开始时间点(00:00:00)
- 获取昨天的开始时间点(00:00:00)和结束时间点(23:59:59)
- 获取前天的开始时间点(00:00:00)
- 获取7天前的那个时间的开始时间点(00:00:00)
- 获取14天前的那个时间的开始时间点(00:00:00)
- 获取本周一的那个时间的开始时间点(00:00:00)
- 获取上周一的那个时间的开始时间点(00:00:00)
- 获取过去指定时间的那个时间的开始时间点(00:00:00)
- 获取本月1号的那个时间的开始时间点(00:00:00)
- 获取过去指定月份的那个月份的1号的开始时间点(00:00:00)
- 获取过去指定年份的那个时间的1月1号的那个时间的开始时间点(00:00:00)
工具路径:
```java
com.yishuifengxiao.common.tool.datetime.LocalDateTimeUtil
```
使用示例:
```java
//今天的开始时间(今天的00:00:00)
LocalDateTime todayStart = TemporalUtil.todayStart();
//获取昨天的开始时间(昨天的00:00:00)
LocalDateTime yesterdayStart = TemporalUtil.yesterdayStart();
//获取昨天的结束时间(昨天的23:59:59)
LocalDateTime yesterdayEnd = TemporalUtil.yesterdayEnd();
//获取前天的开始时间(前天的00:00:00)
LocalDateTime last2DayStart = TemporalUtil.last2DayStart();
//获取7天前那一天0时0分0秒这个时间(七天前的00:00:00)
LocalDateTime last7DayStart = TemporalUtil.last7DayStart();
//获取本周一的开始时间(本周一的00:00:00)
LocalDateTime mondayStart = TemporalUtil.mondayStart();
//获取本月的开始时间(本月1号的00:00:00)
LocalDateTime monthStart = TemporalUtil.monthStart();
//获取1个月前的那个月的开始时间(1个月前的那个月的00:00:00)
LocalDateTime monthStart1 = TemporalUtil.monthStart(1);
```
## 3.3 时间解析与格式化工具
该工具的主要目的是实现字符串与时间的转换以及不同格式时间的转换,主要功能如下
- 获取中国时区
- LocalDateTime与Date相互转换
- 将时间转换成毫秒数
- 将字符串解析为时间
- 将时间格式化为字符串
工具路径:
```java
com.yishuifengxiao.common.tool.datetime.DateTimeUtil
```
使用示例:
```java
// 获取中国时区
ZoneId china = DateTimeUtil.zoneIdOfChina();
// 将 Date 转换成 LocalDateTime
LocalDateTime localDateTime = DateTimeUtil.date2LocalDateTime(new Date());
// 将 LocalDateTime 转换成 Date
Date date = DateTimeUtil.localDateTime2Date(LocalDateTime.now());
//将时间转换成毫秒数
Long time = DateTimeUtil.getTime(date);
Long time1 = DateTimeUtil.getTime(localDateTime);
//将时间格式化为字符串
String format = DateTimeUtil.format(date);
String format1 = DateTimeUtil.format(localDateTime);
//按照指定格式将时间格式化为字符串
String format3 = DateTimeUtil.format(date, "yyyy-MM-dd HH:mm:ss");
String format4 = DateTimeUtil.format(localDateTime, "yyyy-MM-dd HH:mm:ss");
//将字符串转换成时间
LocalDateTime parse = DateTimeUtil.parse("2021-10-10 12:12:12");
//按照指定格式将字符串转换成时间
LocalDateTime parse1 = DateTimeUtil.parse("2021-10-10 12:12:12", "yyyy-MM-dd HH:mm:ss");
```
# 四 加解密工具
## 4.1 AES加解密工具
该工具是基于AES算法实现的加解密工具。其主要作用如下:
- 实现AES算法加密
- 实现AES算法解密
工具路径:
```java
com.yishuifengxiao.common.tool.codec.AES
```
使用示例:
```java
//使用指定的秘钥对数据进行加密
String encrypt = AES.encrypt("秘钥", "待加密的数据");
// 使用指定的秘钥对加密后的数据进行解密,若待解密的数据为空或解密出现问题时返回为null
AES.decrypt("秘钥", encrypt);
```
## 4.2 DES加解密工具
该工具是基于DES算法实现的加解密工具。其主要作用如下:
- 实现DES算法加密
- 实现DES算法解密
工具路径:
```java
com.yishuifengxiao.common.tool.codec.DES
```
使用示例:
```java
//使用指定的秘钥对数据进行加密
String encrypt = DES.encrypt("秘钥", "待加密的数据");
// 使用指定的秘钥对加密后的数据进行解密,若待解密的数据为空或解密出现问题时返回为null
DES.decrypt("秘钥", encrypt);
```
## 4.3 MD5加密工具
该工具主要是使用MD5算法对字符串进行加密操作。
工具路径:
```java
com.yishuifengxiao.common.tool.codec.MD5
```
使用示例:
```java
//对字符串进行MD5加密,输入32位小写的MD5值
String md5 = Md5.md5("待加密码的数据");
//对字符串进行MD5加密,输入16位小写的MD5值
String md5Short = Md5.md5Short("待加密码的数据");
```
# 五 通用实体类
## 5.1 通用响应对象
该对象的主要目的是在进行后端开发时统一响应数据的格式,使得全体应用中接口的返回数据的格式能够保持一致性,方便前端开发处理的同时让全局风格保持一定的规范性。
通用响应对象的属性及定义如下:
| 修饰符| 数据类型 | 属性及含义 |
| ------------------| ------------------------------ | ------------------------------------------------------------ |
| `protected`| ` int` | `code`请求的响应码 |
| `protected ` | `T` | `data`响应数据,在基本基本信息无法满足时会出现此信息,一般情况下无此信息 |
| `protected `| `Date` | `date`响应时间 |
| `protected `|`String` | `id`请求ID,用于请求追踪 .无论调用接口成功与否,都会返回请求 ID,该序列号全局唯一且随机 |
| `protected `|`String` | `msg`响应提示信息,一般与响应码的状态对应,对响应结果进行简单地描述 |
### 5.1.1 赋值说明
- 响应码`code` : 在默认情况下借鉴了HttpStatus的响应值和含义,其定义可参见 [https://developer.mozilla.org/en-US/docs/Web/HTTP/Statu]( https://developer.mozilla.org/en-US/docs/Web/HTTP/Statu)
- 响应数据`data` : 在定义中该属性是一个泛型,用户可以传输各种必需的响应数据。如果用户不需要传输数据仅仅通过响应码表达请求操作结果时,该属性可以置空或使用默认值
- 响应信息 `msg` : 该属性在一般情况用于辅助描述响应码希望表达的含义
### 5.1.2 常用创建方法
|修饰符及响应 | `方法使用及说明 |
| ------------------------- | ------------------------------------------------------------ |
| `static Response