易鹏工具类
授权工具-KPAuthorizationUtil
获取应用ID
KPAuthorizationUtil.getAppId()
获取应用密钥
参数说明:
length: 密钥长度
KPAuthorizationUtil.getAppSecret(60)
Base64工具类-KPBase64Utils
一个增强的 Base64 工具类,提供标准和 URL 安全的 Base64 编码/解码功能,并集成了加盐机制。该工具类采用在 Base64 编码后的字符串首尾添加随机盐值的方式,有效防止对固定明文的 Base64 编码进行彩虹表攻击,增加了加密的安全性。
标准Base64编码
对字符串进行标准Base64编码
String encoded = KPBase64Utils.encode("Hello World");
URL安全的Base64编码
对URL进行URL安全的Base64编码,该算法使用 '-' 代替 '+',使用 '_' 代替 '/',并且默认不进行填充(即移除末尾的 '=')
String urlSafeEncoded = KPBase64Utils.encodeUrlSafe("https://www.example.com");
标准Base64解码
对标准Base64编码的字符串进行解码
String decoded = KPBase64Utils.decode("SGVsbG8gV29ybGQ=");
URL安全的Base64解码
对URL安全的Base64编码的字符串进行解码
String urlSafeDecoded = KPBase64Utils.decodeUrlSafe("SGVsbG8gV29ybGQ");
添加盐值
在字符串的开头和结尾添加随机生成的盐,增加安全性
String salted = KPBase64Utils.addSalt("SGVsbG8gV29ybGQ=", 10);
参数说明:
input: 原始输入字符串(推荐是Base64编码后的字符串)saltLength: 盐的长度,前缀和后缀的盐将各占此长度
移除盐值
移除在字符串开头和结尾添加的盐
String unsalted = KPBase64Utils.removeSalt(salted, 10);
参数说明:
saltedInput: 加盐后的字符串saltLength: 盐的长度,将从字符串首尾各移除此长度的字符
核心方法列表
| 方法名 | 参数 | 返回值 | 说明 |
|---|---|---|---|
| encode | String plainText | String | 标准Base64编码 |
| encodeUrlSafe | String plainText | String | URL安全的Base64编码 |
| decode | String base64String | String | 标准Base64解码 |
| decodeUrlSafe | String urlSafeBase64String | String | URL安全的Base64解码 |
| addSalt | String input, int saltLength | String | 添加盐值 |
| removeSalt | String saltedInput, int saltLength | String | 移除盐值 |
条形码工具类-KPBarCodeUtil
条形码生成与处理工具,支持生成 Code128 格式条形码,提供自定义样式(尺寸、颜色、字体等)、条形码下载及图片流输出能力,适用于商品标签、物流编码等场景。
构造器
初始化条形码基础信息
public KPBarCodeUtil(String vaNumber, String words)
参数说明:
vaNumber: 条形码编码内容(必填)words: 条形码下方显示文字(可选,为空时不显示文字)
生成条形码图片流
根据配置参数生成条形码图片流(BufferedImage),支持含文字和不含文字两种模式。
BufferedImage image = new KPBarCodeUtil("A80/90R8A8A", "A80/90R8A8A")
.width(400) // 设置宽度为 400
.height(60) // 设置条形码高度为 60
.textColor(Color.GREEN) // 设置文字颜色为绿色
.font("宋体") // 设置文字字体为宋体
.generate() // 生成条形码
.getBufferedImage(); // 获取图片流
下载条形码图片
生成条形码后,直接通过 HTTP 响应下载条形码图片到客户端,自动处理响应流和文件格式。
@RestController
@RequestMapping("/barcode")
public class BarCodeController {
@GetMapping("/download")
public void downloadBarCode() {
// 生成条形码并下载,文件名为"order_barcode"
new KPBarCodeUtil("ORDER20241104001", "订单编号:ORDER20241104001")
.wordheight(80)
.imageType("jpg")
.generate()
.downLoad("order_barcode");
}
}
参数说明:
downLoadFileName: 下载文件名(不能包含后缀,如order_barcode而不能输入order_barcode.jpg)
核心属性
该类采用建造者模式设计,支持链式调用配置条形码参数,核心属性如下:
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| vaNumber | String | - | 条形码编码内容(必填,通过构造器传入) |
| words | String | - | 条形码下方显示文字(可选,通过构造器传入,为空时不显示文字) |
| width | Integer | 300 | 条形码宽度 |
| height | Integer | 50 | 条形码高度(不含文字区域) |
| wordheight | Integer | 75 | 含文字区域的条形码总高度 |
| backColor | Color | Color.WHITE | 背景颜色 |
| textColor | Color | Color.BLACK | 文字颜色 |
| imageType | String | ImgUtil.IMAGE_TYPE_PNG | 条形码图片格式(如 png、jpg) |
| font | String | "微软雅黑" | 文字字体 |
返回值:KPBarCodeUtil 自身实例,支持链式调用后续方法(如获取图片流、下载等)。
异常说明:若编码参数错误,抛出 KPServiceException 异常。
二维码工具类-KPQRCodeUtil
二维码生成与处理工具,基于 Hutool 库封装,支持自定义二维码尺寸、颜色、边距,并能方便地添加中心 Logo(支持网络图片和本地图片)。提供图片流输出和 HTTP 响应下载功能,适用于信息分享、登录验证、产品溯源等广泛场景。
构造器
初始化二维码基础信息
public KPQRCodeUtil(String body)
参数说明:
body: String 类型,必填。要存储在二维码中的内容,可以是网址、文本、JSON 字符串等。
生成二维码图片流
如果需要对生成的二维码图片进行进一步处理(例如加水印、合并图片等),可以获取 BufferedImage 对象。
BufferedImage image = new KPQRCodeUtil("这是一个自定义样式的二维码")
.width(400) // 二维码宽度
.height(400) // 二维码高度
.margin(2) // 二维码的边距
.foreColor(Color.BLUE) // 设置前景色为蓝色
.backColor(new Color(240, 240, 240)) // 设置背景色为浅灰色
.generate() // 生成二维码
.getBufferedImage(); // 获取图片流
下载二维码图片
生成二维码后,直接通过 HTTP 响应下载二维码图片到客户端,自动处理响应流和文件格式。
@RestController
@RequestMapping("/qrcode")
public class QRCodeController {
@GetMapping("/download")
public void downloadQRCode() {
new KPQRCodeUtil("这是一个自定义样式的二维码")
.width(400) // 二维码宽度
.height(400) // 二维码高度
.margin(2) // 二维码的边距
.foreColor(Color.BLUE) // 设置前景色为蓝色
.backColor(new Color(240, 240, 240)) // 设置背景色为浅灰色
.logoLocalhostPath(localLogoPath) // 添加本地Logo
// .logoUrl("https://picsum.photos/200") // 或者添加网络Logo
.generate() // 生成二维码
.downLoad("simple_qrcode");
}
}
参数说明:
downLoadFileName: 下载文件名(不能包含后缀,如simple_qrcode而不能输入simple_qrcode.jpg)
核心属性
该类采用建造者模式设计,支持链式调用配置二维码参数。
配置方法列表
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| imageType | String | ImgUtil.IMAGE_TYPE_PNG | 二维码图片格式(如 png、jpg) |
| width | Integer | 300 | 二维码宽度(像素) |
| height | Integer | 300 | 二维码高度(像素) |
| margin | Integer | 1 | 设置二维码与图片边缘之间的边距(像素) |
| foreColor | Color | null (Hutool 默认黑色) | 设置二维码数据点的颜色 |
| backColor | Color | Color.WHITE | 背景颜色 |
| logoUrl | String | null | 设置中心 Logo 的网络图片 URL |
| logoLocalhostPath | String | null | 设置中心 Logo 的本地文件路径 |
生成与输出方法
| 方法名 | 返回类型 | 说明 |
|---|---|---|
| generate() | KPQRCodeUtil | 核心方法。根据之前的所有配置生成二维码图像,并返回自身实例以供后续操作 |
| getBufferedImage() | BufferedImage | 在 generate() 之后调用,获取生成的二维码图片流(BufferedImage 对象),可用于后续的图片处理或本地保存 |
| downLoad(String) | void | 便捷方法。在内部自动调用 generate(),并将生成的二维码图片通过 HTTP 响应直接下载到客户端浏览器 |
BigDecimal工具类-KPBigDecimalUtils
高精度计算工具类,用于处理高精度的数学运算,避免浮点数计算中的精度问题。该工具类支持加、减、乘、除、取余等运算,并提供多种取整模式和格式化输出方法。
构造器
创建KPBigDecimalUtils实例的多种方式
// 通过BigDecimal创建
KPBigDecimalUtils utils1 = new KPBigDecimalUtils(new BigDecimal("10.5"));
// 通过字符串创建
KPBigDecimalUtils utils2 = new KPBigDecimalUtils("20.8");
// 通过整数创建
KPBigDecimalUtils utils3 = new KPBigDecimalUtils(100);
// 通过长整型创建
KPBigDecimalUtils utils4 = new KPBigDecimalUtils(1000L);
// 通过双精度浮点数创建
KPBigDecimalUtils utils5 = new KPBigDecimalUtils(99.9);
基本运算
支持加、减、乘、除、取余等基本运算操作
// 加法运算
KPBigDecimalUtils result1 = new KPBigDecimalUtils("10.5").add("20.3");
// 减法运算
KPBigDecimalUtils result2 = new KPBigDecimalUtils("50.0").sub("15.5");
// 乘法运算
KPBigDecimalUtils result3 = new KPBigDecimalUtils("6.5").multiply("7.2");
// 除法运算
KPBigDecimalUtils result4 = new KPBigDecimalUtils("100.0").divide("3.0", 2);
// 取余运算
KPBigDecimalUtils result5 = new KPBigDecimalUtils("10.5").balance("3");
全量链式调用示例
以下是一个综合示例,展示了如何使用链式调用完成复杂的数学运算:
// 计算 ((100.5 + 200.8 - 50.3) * 2.5 / 3.0) % 7.5
KPBigDecimalUtils result = new KPBigDecimalUtils("100.5")
.add("200.8") // 加法
.sub("50.3") // 减法
.multiply("2.5") // 乘法
.divide("3.0", 2) // 除法,保留2位小数
.balance("7.5"); // 取余
// 获取最终结果
BigDecimal finalResult = result.build();
System.out.println("计算结果: " + finalResult); // 输出: 209.17
// 也可以指定精度和取整模式
BigDecimal preciseResult = result.build(4, RoundingMode.HALF_UP);
System.out.println("精确结果: " + preciseResult); // 输出: 209.1667
// 转换为其他数据类型
String resultStr = result.buildString();
Integer resultInt = result.buildInteger(RoundingMode.HALF_UP);
Double resultDouble = result.buildDouble(2, RoundingMode.HALF_UP);
System.out.println("字符串结果: " + resultStr); // 输出: 209.17
System.out.println("整数结果: " + resultInt); // 输出: 209
System.out.println("双精度结果: " + resultDouble); // 输出: 209.17
取整模式常量
工具类提供了常用的取整模式常量:
| 常量名 | 说明 |
|---|---|
| ROUND_UP | 向上取整 |
| ROUND_DOWN | 向下取整 |
| ROUND_HALF_UP | 四舍五入 |
结果构建与输出
提供多种方式将计算结果转换为不同数据类型
KPBigDecimalUtils calc = new KPBigDecimalUtils("10.5").add("20.3");
// 获取BigDecimal结果
BigDecimal result = calc.build();
// 获取指定精度和取整模式的结果
BigDecimal preciseResult = calc.build(2, RoundingMode.HALF_UP);
// 获取字符串结果
String strResult = calc.buildString();
// 获取整数结果
Integer intResult = calc.buildInteger(RoundingMode.HALF_UP);
// 获取长整型结果
Long longResult = calc.buildLong(RoundingMode.HALF_UP);
// 获取双精度浮点数结果
Double doubleResult = calc.buildDouble(2, RoundingMode.HALF_UP);
// 获取单精度浮点数结果
Float floatResult = calc.buildFloat(2, RoundingMode.HALF_UP);
静态比较方法
提供静态方法用于比较两个BigDecimal值
int comparison = KPBigDecimalUtils.compareTo(new BigDecimal("10.5"), new BigDecimal("20.3"));
// comparison < 0 表示第一个数小于第二个数
// comparison = 0 表示两个数相等
// comparison > 0 表示第一个数大于第二个数
核心方法列表
基本运算方法
| 方法名 | 参数 | 返回值 | 说明 |
|---|---|---|---|
| add | BigDecimal/Object value | KPBigDecimalUtils | 加法运算 |
| sub | BigDecimal/Object value | KPBigDecimalUtils | 减法运算 |
| multiply | BigDecimal/Object value | KPBigDecimalUtils | 乘法运算 |
| divide | BigDecimal/Object value, int scale | KPBigDecimalUtils | 除法运算 |
| balance | BigDecimal/Object value | KPBigDecimalUtils | 取余运算 |
结果构建方法
| 方法名 | 参数 | 返回值 | 说明 |
|---|---|---|---|
| build | 无 | BigDecimal | 获取计算结果 |
| build | int scale, RoundingMode roundingMode | BigDecimal | 获取指定精度和取整模式的结果 |
| buildString | 无 | String | 获取字符串结果 |
| buildString | String symbol | String | 获取带符号的字符串结果 |
| buildString | int scale, RoundingMode roundingMode | String | 获取指定精度的字符串结果 |
| buildString | int scale, RoundingMode roundingMode, String symbol | String | 获取指定精度和符号的字符串结果 |
| buildInteger | 无 | Integer | 获取整数结果 |
| buildInteger | RoundingMode roundingMode | Integer | 获取指定取整模式的整数结果 |
| buildLong | 无 | Long | 获取长整型结果 |
| buildLong | RoundingMode roundingMode | Long | 获取指定取整模式的长整型结果 |
| buildDouble | 无 | Double | 获取双精度浮点数结果 |
| buildDouble | int scale, RoundingMode roundingMode | Double | 获取指定精度的双精度浮点数结果 |
| buildFloat | 无 | Float | 获取单精度浮点数结果 |
| buildFloat | int scale, RoundingMode roundingMode | Float | 获取指定精度的单精度浮点数结果 |
静态方法
| 方法名 | 参数 | 返回值 | 说明 |
|---|---|---|---|
| compareTo | BigDecimal val1, BigDecimal val2 | int | 比较两个BigDecimal值 |
命令行工具类-KPCmdUtil
命令行执行工具类,用于执行系统命令、获取网络设备信息等操作。支持跨平台命令执行、IP/MAC地址获取以及局域网设备扫描等功能。
执行系统命令
执行任意系统命令并获取执行结果
String result = KPCmdUtil.command("ping 192.168.1.1");
System.out.println("命令执行结果:" + result);
参数说明:
cmd: 要执行的命令字符串
获取指定IP的MAC地址
根据指定IP地址获取对应的MAC地址(支持本机IP)
String mac = KPCmdUtil.getMac("192.168.1.1");
System.out.println("MAC地址:" + mac);
参数说明:
ip: 目标IP地址
返回值:
- 成功时返回MAC地址字符串,如"00:1B:44:11:3A:B7"
- 失败或IP不可达时返回null
获取ARP缓存中的所有IP和MAC
查询当前ARP缓存中的所有IP和对应MAC地址
List<JSONObject> ipMacs = KPCmdUtil.getIPAndMacs();
for (JSONObject item : ipMacs) {
System.out.println("IP: " + item.getString("ip") + ", MAC: " + item.getString("mac"));
}
返回值:
- 包含[ip, mac]键值对的JSONObject列表
扫描局域网所有活跃设备
主动扫描指定网段内的所有活跃设备(包括本机)
List<JSONObject> devices = KPCmdUtil.scanAllLanDevices("192.168.0.", 1, 255);
for (JSONObject device : devices) {
System.out.println("IP: " + device.getString("ip") + ", MAC: " + device.getString("mac") +(device.getBooleanValue("isLocal") ? " (本机)" : ""));
}
参数说明:
subnet: 子网前缀,如"192.168.0."start: 起始IP地址末段end: 结束IP地址末段
返回值:
- 包含[ip, mac, isLocal]键值对的JSONObject列表,其中isLocal标识是否为本机
核心方法列表
| 方法名 | 参数 | 返回值 | 说明 |
|---|---|---|---|
| command | String cmd | String | 执行系统命令 |
| getMac | String ip | String | 获取指定IP的MAC地址 |
| getIPAndMacs | 无 | List<JSONObject> | 获取ARP缓存中的所有IP和MAC |
| scanAllLanDevices | String subnet, int start, int end | List<JSONObject> | 扫描局域网所有活跃设备 |
使用示例
以下是一些典型的使用场景示例:
示例1:检查网络连通性
public class NetworkConnectivityCheck {
public static void main(String[] args) {
try {
// 检查网关连通性
String gatewayPingResult = KPCmdUtil.command("ping 192.168.1.1 -n 4");
System.out.println("网关连通性测试结果:");
System.out.println(gatewayPingResult);
// 检查外网连通性
String externalPingResult = KPCmdUtil.command("ping www.baidu.com -n 4");
System.out.println("外网连通性测试结果:");
System.out.println(externalPingResult);
} catch (Exception e) {
System.err.println("网络连通性检查失败:" + e.getMessage());
}
}
}
示例2:获取本机网络信息
public class LocalNetworkInfo {
public static void main(String[] args) {
try {
// 获取本机IP(依赖KPIPUtil)
String localIp = KPIPUtil.getHostIp();
System.out.println("本机IP地址:" + localIp);
// 获取本机MAC地址
String localMac = KPCmdUtil.getMac(localIp);
System.out.println("本机MAC地址:" + localMac);
// 获取ARP缓存中的所有设备
List<JSONObject> arpDevices = KPCmdUtil.getIPAndMacs();
System.out.println("ARP缓存中的设备数量:" + arpDevices.size());
for (JSONObject device : arpDevices) {
System.out.println("IP: " + device.getString("ip") + ", MAC: " + device.getString("mac"));
}
} catch (Exception e) {
System.err.println("获取本机网络信息失败:" + e.getMessage());
e.printStackTrace();
}
}
}
示例3:扫描局域网设备
public class LanDeviceScanner {
public static void main(String[] args) {
try {
// 扫描常见C类局域网段
String subnet = "192.168.1.";
System.out.println("开始扫描网段:" + subnet + "1-" + "254");
long startTime = System.currentTimeMillis();
List<JSONObject> devices = KPCmdUtil.scanAllLanDevices(subnet, 1, 254);
long endTime = System.currentTimeMillis();
System.out.println("扫描完成,耗时:" + (endTime - startTime) + "ms");
System.out.println("发现活跃设备 " + devices.size() + " 台:");
for (JSONObject device : devices) {
String isLocal = device.containsKey("isLocal") && device.getBooleanValue("isLocal") ? " (本机)" : "";
System.out.println("IP: " + device.getString("ip") + ", MAC: " + device.getString("mac") + isLocal);
}
} catch (Exception e) {
System.err.println("局域网设备扫描失败:" + e.getMessage());
e.printStackTrace();
}
}
}
集合工具类-KPCollectionUtil
集合操作工具类,提供集合判断、分页、索引查找、批量插入等功能。简化集合操作,提高开发效率。
判断元素是否在集合中
检查一个元素是否存在于指定的列表中。
List<String> list = Arrays.asList("apple", "banana", "orange");
boolean result = KPCollectionUtil.isEquals("apple", list);
参数说明:
element: 要检查的元素 (可以为 null)list: 要在其中搜索的列表
返回值: 如果元素在列表中存在,则返回 true,否则返回 false
判断字符串是否包含在列表中
检查一个字符串是否包含在指定的字符串列表中。
List<String> list = Arrays.asList("apple", "banana", "orange");
boolean result = KPCollectionUtil.isContain("app", list);
参数说明:
element: 要检查的字符串list: 要在其中搜索的字符串列表
返回值: 如果列表中存在包含该字符串的元素,则返回 true,否则返回 false
查找对象属性在列表中的位置
查询list中某个属性的位置。
List<User> users = getUserList();
Integer index = KPCollectionUtil.index(users, "name", "张三");
参数说明:
list: 对象列表field: 属性名称condition: 条件值
返回值: 属性匹配的对象在列表中的索引位置,未找到返回-1
集合物理分页
对列表进行物理分页处理。
List<String> list = Arrays.asList("a", "b", "c", "d", "e", "f");
List<?> pageResult = KPCollectionUtil.paging(list, 2, 3);
参数说明:
list: 待分页的列表pageNo: 页码(从1开始)pageSize: 每页大小
返回值: 分页后的列表数据
获取两个对象字段的差集
在多表关联查询中,自动生成两个实体类字段的差集SQL片段,避免手动编写冗长的SELECT语句。
String disjunction = KPCollectionUtil.getFileNameDisjunction(ArchiveListCustomerPO.class, ArchivePO.class, "type");
参数说明:
clazz: 包含所有需要字段的目标类(通常是查询结果类)clazz2: 进行比较的源类(通常是主表实体类)prefix: 数据库表别名前缀
返回值: 两个对象字段差集组成的SQL片段,用于MPJLambdaWrapper的select方法
批量插入数据
批量插入数据,自动按指定大小分组。支持两种重载形式:
- 直接插入指定类型的列表:
boolean success = KPCollectionUtil.insertBatch(userMapper, userList, 100);
- 插入需要类型转换的列表:
boolean success = KPCollectionUtil.insertBatch(userMapper, dtoList, User.class, 100);
参数说明:
baseMapper: MyBatis-Plus的BaseMapper接口实例list: 待插入的数据列表clazz: 插入时需要转换的实体类(第二种形式)batchSize: 每组大小(每次插入数量,避免数据太大数据库报错),默认100, 例如dtoList有2万条,100 表示每次插入100条 总的执行 2000/100 次sql
返回值: 是否全部插入成功
核心方法列表
| 方法名 | 参数 | 返回值 | 说明 |
|---|---|---|---|
| isEquals | T element, List<T> list | boolean | 检查元素是否在列表中 |
| isContain | String element, List<String> list | boolean | 检查字符串是否包含在列表中 |
| index | List<?> list, String field, String condition | Integer | 查找对象属性在列表中的位置 |
| paging | List<?> list, Integer pageNo, Integer pageSize | List<?> | 集合物理分页 |
| getFileNameDisjunction | Class clazz, Class clazz2, String prefix | String | 获取两个对象字段的差集 |
| insertBatch | ParentMapper<T> baseMapper, List<T> list, int batchSize | boolean | 批量插入同类型数据 |
| insertBatch | ParentMapper<T> baseMapper, List list, Class<T> clazz, int batchSize | boolean | 批量插入并转换类型数据 |
使用示例
以下是一个完整的使用示例,展示了如何在实际业务中使用getFileNameDisjunction方法:
public List<ArchiveListCustomerPO> queryPageList(ArchiveListParamPO archiveListParamPO) {
List<String> archiveTypeList = new ArrayList<>();
if (KPStringUtil.isNotEmpty(archiveListParamPO.getArchiveTypeId()))
archiveTypeList = archiveTypeMapper.queryArchiveTypeSubsetId(archiveListParamPO.getArchiveTypeId());
MPJLambdaWrapper<ArchivePO> wrapper = new MPJLambdaWrapper<ArchivePO>()
.selectAll(ArchivePO.class)
// 自动生成差集字段,避免手动编写冗长的SELECT语句
.select(KPCollectionUtil.getFileNameDisjunction(ArchiveListCustomerPO.class, ArchivePO.class, "type"))
.leftJoin(ArchiveTypePO.class, "type", on -> on
.eq(ArchiveTypePO::getArchiveTypeId, ArchivePO::getArchiveTypeId)
.eq(ArchiveTypePO::getDeleteFlag, DeleteFalgEnum.NORMAL.code())
)
.disableSubLogicDel()
.in(KPStringUtil.isNotEmpty(archiveListParamPO.getArchiveTypeId()), ArchivePO::getArchiveTypeId, archiveTypeList)
.like(KPStringUtil.isNotEmpty(archiveListParamPO.getName()), ArchivePO::getName, archiveListParamPO.getName())
.like(KPStringUtil.isNotEmpty(archiveListParamPO.getCode()), ArchivePO::getCode, archiveListParamPO.getCode())
.like(KPStringUtil.isNotEmpty(archiveListParamPO.getBusinessNumber()), ArchivePO::getBusinessNumber, archiveListParamPO.getBusinessNumber())
.eq(KPStringUtil.isNotEmpty(archiveListParamPO.getStatus()), ArchivePO::getStatus, archiveListParamPO.getStatus());
//分页和排序
PageHelper.startPage(archiveListParamPO.getPageNum(), archiveListParamPO.getPageSize(), archiveListParamPO.getOrderBy(ArchivePO.class));
return this.baseMapper.selectJoinList(ArchiveListCustomerPO.class, wrapper);
}
在这个示例中,[getFileNameDisjunction]方法会自动分析[ArchiveListCustomerPO]和[ArchivePO]两个类的字段差异,
然后生成类似type.name as name, type.code as code这样的SQL片段,避免了手动编写所有需要的字段。
数据库兼容工具类-KPDatabaseUtil
数据库兼容工具类,用于解决不同数据库之间的语法差异,提供统一的接口来处理数据库特定的功能。主要支持MySQL、PostgreSQL、SQL Server、Oracle和H2数据库。
聚合函数兼容处理
将字段按指定分隔符拼接,兼容不同数据库的语法差异(替代MySQL的GROUP_CONCAT)。
// 在查询中使用groupConcat方法
MPJLambdaWrapper<MonthlyReportPO> wrapper = new MPJLambdaWrapper<MonthlyReportPO>()
.select(KPDatabaseUtil.groupConcat("monthlyReportUser.user_name", true, "userNames"))
.leftJoin(MonthlyReportUserPO.class, "monthlyReportUser", on -> on
.eq(MonthlyReportUserPO::getMonthlyId, MonthlyReportPO::getMonthlyId));
参数说明:
column: 要拼接的字段名distinct: 是否去重alias: 别名
返回值: 数据库兼容的聚合函数SQL片段
重载方法:去重拼接
提供去重拼接的简化方法。
String sqlFragment = KPDatabaseUtil.groupDistinctConcat("user_name", "userNames");
参数说明:
column: 要拼接的字段名alias: 别名
返回值: 数据库兼容的去重聚合函数SQL片段
实体类全字段分组参数生成
根据不同数据库的规则,自动生成实体类字段的GROUP BY语句。
MPJLambdaWrapper<MonthlyReportPO> wrapper = new MPJLambdaWrapper<>();
KPDatabaseUtil.groupFieldsBy(wrapper, "monthlyReport", MonthlyReportPO.class);
参数说明:
wrapper: MPJLambdaWrapper查询包装器tableAlias: 数据库表别名entityClass: 实体类
返回值: void(直接修改wrapper对象)
核心方法列表
| 方法名 | 参数 | 返回值 | 说明 |
|---|---|---|---|
| groupConcat | String column, boolean distinct, String alias | String | 聚合函数:将字段按指定分隔符拼接(兼容不同数据库) |
| groupDistinctConcat | String column, String alias | String | 聚合函数:将字段去重后按指定分隔符拼接(兼容不同数据库) |
| groupFieldsBy | MPJLambdaWrapper<T> wrapper, String tableAlias, Class<T> entityClass | void | 根据实体类自动生成适用于不同数据库的GROUP BY语句 |
使用示例
以下是一个完整的使用示例,展示了如何在实际业务中使用该工具类:
public List<MonthlyReportListCustomerPO> queryPageList(MonthlyReportListParamPO monthlyReportListParamPO) {
MPJLambdaWrapper<MonthlyReportPO> wrapper = new MPJLambdaWrapper<MonthlyReportPO>("monthlyReport")
.selectAll(MonthlyReportPO.class, "monthlyReport")
.select(KPDatabaseUtil.groupDistinctConcat("monthlyReportUser.user_name", "userNamss"))
.leftJoin(MonthlyReportUserPO.class, "monthlyReportUser", on -> on
.eq(MonthlyReportUserPO::getMonthlyId, MonthlyReportPO::getMonthlyId)
.eq(MonthlyReportUserPO::getDeleteFlag, DeleteFalgEnum.NORMAL.code())
)
.disableSubLogicDel()
.between(KPStringUtil.isNotEmpty(monthlyReportListParamPO.getPlanTimes()),
MonthlyReportPO::getPlanDate,
monthlyReportListParamPO.getPlanTimes() == null ? LocalDate.now() : KPLocalDateUtil.getEffectiveDate(monthlyReportListParamPO.getPlanTimes().get(0)),
monthlyReportListParamPO.getPlanTimes() == null ? LocalDate.now() : KPLocalDateUtil.getEffectiveDate(monthlyReportListParamPO.getPlanTimes().get(1)))
.like(KPStringUtil.isNotEmpty(monthlyReportListParamPO.getProjectName()),
MonthlyReportPO::getProjectName,
monthlyReportListParamPO.getProjectName())
.like(KPStringUtil.isNotEmpty(monthlyReportListParamPO.getTaskName()),
MonthlyReportPO::getTaskName,
monthlyReportListParamPO.getTaskName())
.eq(KPStringUtil.isNotEmpty(monthlyReportListParamPO.getPriority()),
MonthlyReportPO::getPriority,
monthlyReportListParamPO.getPriority())
.eq(KPStringUtil.isNotEmpty(monthlyReportListParamPO.getStatus()),
MonthlyReportPO::getStatus,
monthlyReportListParamPO.getStatus())
.eq(KPStringUtil.isNotEmpty(monthlyReportListParamPO.getSource()),
MonthlyReportPO::getSource,
monthlyReportListParamPO.getSource())
.eq(KPStringUtil.isNotEmpty(monthlyReportListParamPO.getPostId()),
MonthlyReportPO::getPostId,
monthlyReportListParamPO.getPostId())
.eq(KPStringUtil.isNotEmpty(monthlyReportListParamPO.getDeptId()),
MonthlyReportPO::getDeptId,
monthlyReportListParamPO.getDeptId());
// 根据不同数据库类型自动生成GROUP BY语句
KPDatabaseUtil.groupFieldsBy(wrapper, "monthlyReport", MonthlyReportPO.class);
Page page = PageHelper.startPage(monthlyReportListParamPO.getPageNum(),
monthlyReportListParamPO.getPageSize(),
monthlyReportListParamPO.getOrderBy(MonthlyReportPO.class));
page.setCountColumn("distinct monthly_id");
List<MonthlyReportListCustomerPO> body = this.baseMapper.selectJoinList(MonthlyReportListCustomerPO.class, wrapper);
body.forEach(po -> po.setPlanTime(KPLocalDateUtil.toString(po.getPlanDate(), KPLocalDateTimeUtil.MONTH_PATTERN)));
return body;
}
日期工具类-KPDateUtil
传统 Date 时间操作工具类,提供日期格式化、解析、计算、转换等功能。支持日期增减、时间差计算、日期比较、时间戳转换等常用操作,并提供与 LocalDateTime/LocalDate 的互转功能。
日期增减操作
对日期进行增减天数、小时、分钟、秒数、月份、年份等操作。
第二个参数 正数表示增加,负数表示减少。
// 增加天数
Date result1 = KPDateUtil.addDays(new Date(), 5);
// 增加小时数
Date result2 = KPDateUtil.addHours(new Date(), 3);
// 增加分钟数
Date result3 = KPDateUtil.addMinutes(new Date(), 30);
// 增加秒数
Date result4 = KPDateUtil.addSeconds(new Date(), 60);
// 增加月数
Date result5 = KPDateUtil.addMonths(new Date(), 2);
// 增加年数
Date result6 = KPDateUtil.addYears(new Date(), 1);
日期格式化与解析
提供多种日期格式化和解析方法,支持自定义格式模板。
// 日期格式化为字符串
String dateStr1 = KPDateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss");
// 字符串解析为 Date 对象
Date date1 = KPDateUtil.parse("2024-11-18 10:30:00", "yyyy-MM-dd HH:mm:ss");
// 转换日期格式
String dateStr2 = KPDateUtil.format("2024-11-18", "yyyy-MM-dd", "yyyy/MM/dd");
日期比较与获取最值
比较两个日期的大小,获取两个日期中的较小值或较大值。
Date date1 = new Date();
Date date2 = KPDateUtil.addDays(new Date(), 5);
// 比较日期
int comparison = KPDateUtil.compare(date1, date2);
// 获取较小值
Date minDate = KPDateUtil.min(date1, date2);
// 获取较大值
Date maxDate = KPDateUtil.max(date1, date2);
日期差值计算
计算两个日期之间的差值,包括天数差、时间差等。
Date startDate = KPDateUtil.parse("2024-11-01", "yyyy-MM-dd");
Date endDate = KPDateUtil.parse("2024-11-18", "yyyy-MM-dd");
// 计算天数差(不含今天)
int days = KPDateUtil.daysBetween(startDate, endDate);
// 计算天数差(包含今天)
int daysIncludeToday = KPDateUtil.daysBetweenIncludeToday(startDate, endDate);
// 计算时间差
String duration = KPDateUtil.getDuration(endDate, startDate);
日期属性获取
获取日期的年份、月份、天数等属性信息。
Date date = new Date();
// 获取年份
int year = KPDateUtil.getYear(date);
// 获取月份(1-12)
int month = KPDateUtil.getMonth(date);
// 获取天数(1-31)
int day = KPDateUtil.getDay(date);
// 获取当月总天数
int daysOfMonth = KPDateUtil.getDaysOfMonth(date);
// 获取当年总天数
int daysOfYear = KPDateUtil.getDaysOfYear(date);
特殊日期获取
获取一些特殊日期,如月初、月末、周一、周日、当天凌晨等。
// 获取当月最小日期(1号)
Date minDayOfMonth = KPDateUtil.getMinDayOfMonth(new Date());
// 获取当月最大日期
Date maxDayOfMonth = KPDateUtil.getMaxDayOfMonth(new Date());
// 获取本周周一日期
String monday = KPDateUtil.getMinDayOfWeek();
// 获取本周周日日期
String sunday = KPDateUtil.getMaxDayOfWeek();
// 获取当天凌晨(00:00:00)
Date weeHours = KPDateUtil.getWeeHours();
// 获取指定年份第一天
Date firstDayOfYear = KPDateUtil.getFirstDayOfYear(new Date());
// 获取指定年份最后一天
Date lastDayOfYear = KPDateUtil.getLastDayOfYear(new Date());
时间戳相关操作
提供时间戳与日期之间的相互转换功能。
// 获取当前秒级时间戳
String timestamp = KPDateUtil.getTimestamp();
// 时间戳转换为日期字符串
String dateStr = KPDateUtil.timestampToDate("1700000000", "yyyy-MM-dd HH:mm:ss");
// 日期字符串转换为时间戳(毫秒)
Long timestampMs = KPDateUtil.dateToTimestamp("2024-11-18 10:30:00", "yyyy-MM-dd HH:mm:ss");
日期类型转换
提供Date与LocalDateTime、LocalDate之间的相互转换功能。
// LocalDateTime 转换为 Date
Date date1 = KPDateUtil.toDate(LocalDateTime.now());
// LocalDate 转换为 Date
Date date2 = KPDateUtil.toDate(LocalDate.now());
// Date 转换为 LocalDateTime
LocalDateTime localDateTime = KPDateUtil.toLocalDateTime(new Date());
其他实用方法
提供一些其他实用的日期处理方法。
// 秒数转换为分秒格式字符串
String minuteSecond = KPDateUtil.toMinuteSecond(150); // 输出: 2分30秒
// 获取服务器启动时间
Date serverStartDate = KPDateUtil.getServerStartDate();
核心方法列表
| 方法名 | 参数 | 返回值 | 说明 |
|---|---|---|---|
| addDays | Date date, int days, boolean includeTime | Date | 日期增减天数 |
| format | Date date, String pattern | String | 时间格式化为字符串 |
| format | String date, String pattern | String | 字符串日期格式化 |
| format | String date, String inputPattern, String outputPattern | String | 转换日期格式 |
| parse | String dateTimeString, String pattern | Date | 字符串解析为 Date 对象 |
| addHours | Date startDate, int hours | Date | 时间增减小时 |
| addMinutes | Date startDate, int minutes | Date | 时间增减分钟 |
| addSeconds | Date startDate, int seconds | Date | 时间增减秒数 |
| addDays | Date startDate, int days | Date | 时间增减天数 |
| addMonths | Date startDate, int months | Date | 时间增减月数 |
| addYears | Date startDate, int years | Date | 时间增减年数 |
| compare | Date date1, Date date2 | int | 时间比较 |
| min | Date date1, Date date2 | Date | 获取两个时间的较小值 |
| max | Date date1, Date date2 | Date | 获取两个时间的较大值 |
| daysBetween | Date startDate, Date endDate | int | 两个日期的天数差(不含今天) |
| daysBetweenIncludeToday | Date startDate, Date endDate | int | 两个日期的天数差(包含今天) |
| getYear | Date date | int | 获取日期的年份 |
| getMonth | Date date | int | 获取日期的月份(1-12) |
| getDay | Date date | int | 获取日期的天数(1-31) |
| getDaysOfMonth | Date date | int | 获取当月的总天数 |
| getDaysOfYear | Date date | int | 获取当年的总天数 |
| getMinDayOfMonth | Date date | Date | 获取当月最小日期(1号) |
| getMaxDayOfMonth | Date date | Date | 获取当月最大日期 |
| getMinDayOfWeek | 无 | String | 获取本周周一日期 |
| getMaxDayOfWeek | 无 | String | 获取本周周日日期 |
| timestampToDate | String seconds, String format | String | 时间戳转换为日期字符串 |
| dateToTimestamp | String dateStr, String format | Long | 日期字符串转换为时间戳(毫秒) |
| getTimestamp | 无 | String | 获取当前秒级时间戳 |
| getWeeHours | 无 | Date | 获取当天凌晨(00:00:00) |
| getFirstDayOfYear | Date date | Date | 获取指定年份的第一天 |
| getLastDayOfYear | Date date | Date | 获取指定年份的最后一天 |
| toDate | LocalDateTime localDateTime | Date | LocalDateTime 转换为 Date |
| toDate | LocalDate localDate | Date | LocalDate 转换为 Date |
| toLocalDateTime | Date date | LocalDateTime | Date 转换为 LocalDateTime |
| toMinuteSecond | int seconds | String | 秒数转换为分秒格式字符串 |
| getServerStartDate | 无 | Date | 获取服务器启动时间 |
| getDuration | Date endDate, Date nowDate | String | 计算两个时间差(天、时、分) |
LocalDateTime工具类-KPLocalDateTimeUtil
LocalDateTime 时间操作工具类,其方法名与 KPDateUtil 保持一致,以便于项目迁移。提供日期格式化、解析、计算、转换等功能。支持日期增减、时间差计算、日期比较、时间戳转换等常用操作,并提供与 Date/LocalDate 的互转功能。
日期增减操作
对日期进行增减天数、小时、分钟、秒数、月份、年份等操作。
第二个参数 正数表示增加,负数表示减少。
// 增加天数
LocalDateTime result1 = KPLocalDateTimeUtil.addDays(LocalDateTime.now(), 5);
// 增加小时数
LocalDateTime result2 = KPLocalDateTimeUtil.addHours(LocalDateTime.now(), 3);
// 增加分钟数
LocalDateTime result3 = KPLocalDateTimeUtil.addMinutes(LocalDateTime.now(), 30);
// 增加秒数
LocalDateTime result4 = KPLocalDateTimeUtil.addSeconds(LocalDateTime.now(), 60);
// 增加月数
LocalDateTime result5 = KPLocalDateTimeUtil.addMonths(LocalDateTime.now(), 2);
// 增加年数
LocalDateTime result6 = KPLocalDateTimeUtil.addYears(LocalDateTime.now(), 1);
日期格式化与解析
提供多种日期格式化和解析方法,支持自定义格式模板。
// 日期格式化为字符串
String dateStr1 = KPLocalDateTimeUtil.format(LocalDateTime.now(), "yyyy-MM-dd HH:mm:ss");
// 字符串解析为 LocalDateTime 对象
LocalDateTime date1 = KPLocalDateTimeUtil.parse("2024-11-18 10:30:00", "yyyy-MM-dd HH:mm:ss");
// 转换日期格式
String dateStr2 = KPLocalDateTimeUtil.format("2024-11-18", "yyyy-MM-dd", "yyyy/MM/dd");
日期比较与获取最值
比较两个日期的大小,获取两个日期中的较小值或较大值。
LocalDateTime date1 = LocalDateTime.now();
LocalDateTime date2 = KPLocalDateTimeUtil.addDays(LocalDateTime.now(), 5);
// 比较日期
int comparison = KPLocalDateTimeUtil.compare(date1, date2);
// 获取较小值
LocalDateTime minDate = KPLocalDateTimeUtil.min(date1, date2);
// 获取较大值
LocalDateTime maxDate = KPLocalDateTimeUtil.max(date1, date2);
日期差值计算
计算两个日期之间的差值,包括天数差、时间差等。
LocalDate startDate = LocalDate.of(2024, 11, 1);
LocalDate endDate = LocalDate.of(2024, 11, 18);
// 计算天数差(不含今天)
long days = KPLocalDateTimeUtil.daysBetween(startDate, endDate);
// 计算天数差(包含今天)
long daysIncludeToday = KPLocalDateTimeUtil.daysBetweenIncludeToday(startDate, endDate);
// 计算时间差
String duration = KPLocalDateTimeUtil.getDuration(endDate.atStartOfDay(), startDate.atStartOfDay());
日期属性获取
获取日期的年份、月份、天数等属性信息。
LocalDateTime date = LocalDateTime.now();
// 获取年份
int year = KPLocalDateTimeUtil.getYear(date);
// 获取月份(1-12)
int month = KPLocalDateTimeUtil.getMonth(date);
// 获取天数(1-31)
int day = KPLocalDateTimeUtil.getDay(date);
// 获取当月总天数
int daysOfMonth = KPLocalDateTimeUtil.getDaysOfMonth(date);
// 获取当年总天数
int daysOfYear = KPLocalDateTimeUtil.getDaysOfYear(date);
特殊日期获取
获取一些特殊日期,如月初、月末、周一、周日、当天凌晨等。
// 获取当月最小日期(1号)
LocalDateTime minDayOfMonth = KPLocalDateTimeUtil.getMinDayOfMonth(LocalDateTime.now());
// 获取当月最大日期
LocalDateTime maxDayOfMonth = KPLocalDateTimeUtil.getMaxDayOfMonth(LocalDateTime.now());
// 获取本周周一日期
String monday = KPLocalDateTimeUtil.getMinDayOfWeek();
// 获取本周周日日期
String sunday = KPLocalDateTimeUtil.getMaxDayOfWeek();
// 获取当天凌晨(00:00:00)
LocalDateTime weeHours = KPLocalDateTimeUtil.getWeeHours();
// 获取指定年份第一天
LocalDateTime firstDayOfYear = KPLocalDateTimeUtil.getFirstDayOfYear(LocalDateTime.now());
// 获取指定年份最后一天
LocalDateTime lastDayOfYear = KPLocalDateTimeUtil.getLastDayOfYear(LocalDateTime.now());
时间戳相关操作
提供时间戳与日期之间的相互转换功能。
// 获取当前秒级时间戳
String timestamp = KPLocalDateTimeUtil.getTimestamp();
// 时间戳转换为日期字符串
String dateStr = KPLocalDateTimeUtil.timestampToDate("1700000000", "yyyy-MM-dd HH:mm:ss");
// 日期字符串转换为时间戳(毫秒)
Long timestampMs = KPLocalDateTimeUtil.dateToTimestamp("2024-11-18 10:30:00", "yyyy-MM-dd HH:mm:ss");
日期类型转换
提供LocalDateTime与Date、LocalDate之间的相互转换功能。
// LocalDateTime 转换为 Date
Date date1 = KPLocalDateTimeUtil.toDate(LocalDateTime.now());
// LocalDate 转换为 Date
Date date2 = KPLocalDateTimeUtil.toDate(LocalDate.now());
// Date 转换为 LocalDateTime
LocalDateTime localDateTime = KPLocalDateTimeUtil.toLocalDateTime(new Date());
其他实用方法
提供一些其他实用的日期处理方法。
// 秒数转换为分秒格式字符串
String minuteSecond = KPLocalDateTimeUtil.toMinuteSecond(150); // 输出: 2分30秒
// 获取服务器启动时间
LocalDateTime serverStartDate = KPLocalDateTimeUtil.getServerStartDate();
// 将毫秒数转换为天、小时、分钟、秒和毫秒的字符串形式
String duration = KPLocalDateTimeUtil.formatDuration(3661000L); // 输出: 1时1分1秒
// 计算两个日期时间相差的秒数
long seconds = KPLocalDateTimeUtil.getSecondsBetween(LocalDateTime.now(), KPLocalDateTimeUtil.addMinutes(LocalDateTime.now(), 5));
// 获取从当前时间到当日24:00(次日0点)剩余的秒数
long secondsUntilEnd = KPLocalDateTimeUtil.secondsUntilEndOfDay();
核心方法列表
| 方法名 | 参数 | 返回值 | 说明 |
|---|---|---|---|
| addDays | LocalDateTime date, int days, boolean includeTime | LocalDateTime | 日期增减天数 |
| format | LocalDateTime date, String pattern | String | 时间格式化为字符串 |
| format | String date, String pattern | String | 字符串日期格式化 |
| format | String date, String inputPattern, String outputPattern | String | 转换日期格式 |
| parse | String dateTimeString, String pattern | LocalDateTime | 字符串解析为 LocalDateTime 对象 |
| addHours | LocalDateTime startDate, int hours | LocalDateTime | 时间增减小时 |
| addMinutes | LocalDateTime startDate, int minutes | LocalDateTime | 时间增减分钟 |
| addSeconds | LocalDateTime startDate, int seconds | LocalDateTime | 时间增减秒数 |
| addDays | LocalDateTime startDate, int days | LocalDateTime | 时间增减天数 |
| addMonths | LocalDateTime startDate, int months | LocalDateTime | 时间增减月数 |
| addYears | LocalDateTime startDate, int years | LocalDateTime | 时间增减年数 |
| compare | LocalDateTime date1, LocalDateTime date2 | int | 时间比较 |
| min | LocalDateTime date1, LocalDateTime date2 | LocalDateTime | 获取两个时间的较小值 |
| max | LocalDateTime date1, LocalDateTime date2 | LocalDateTime | 获取两个时间的较大值 |
| daysBetween | LocalDate startDate, LocalDate endDate | long | 两个日期的天数差(不含今天) |
| daysBetweenIncludeToday | LocalDate startDate, LocalDate endDate | long | 两个日期的天数差(包含今天) |
| getYear | LocalDateTime date | int | 获取日期的年份 |
| getMonth | LocalDateTime date | int | 获取日期的月份(1-12) |
| getDay | LocalDateTime date | int | 获取日期的天数(1-31) |
| getDaysOfMonth | LocalDateTime date | int | 获取当月的总天数 |
| getDaysOfYear | LocalDateTime date | int | 获取当年的总天数 |
| getMinDayOfMonth | LocalDateTime date | LocalDateTime | 获取当月最小日期(1号) |
| getMaxDayOfMonth | LocalDateTime date | LocalDateTime | 获取当月最大日期 |
| getMinDayOfWeek | 无 | String | 获取本周周一日期 |
| getMaxDayOfWeek | 无 | String | 获取本周周日日期 |
| timestampToDate | String seconds, String format | String | 时间戳转换为日期字符串 |
| dateToTimestamp | String dateStr, String format | Long | 日期字符串转换为时间戳(毫秒) |
| getTimestamp | 无 | String | 获取当前秒级时间戳 |
| getWeeHours | 无 | LocalDateTime | 获取当天凌晨(00:00:00) |
| getFirstDayOfYear | LocalDateTime date | LocalDateTime | 获取指定年份的第一天 |
| getLastDayOfYear | LocalDateTime date | LocalDateTime | 获取指定年份的最后一天 |
| toDate | LocalDateTime localDateTime | Date | LocalDateTime 转换为 Date |
| toDate | LocalDate localDate | Date | LocalDate 转换为 Date |
| toLocalDateTime | Date date | LocalDateTime | Date 转换为 LocalDateTime |
| toMinuteSecond | int seconds | String | 秒数转换为分秒格式字符串 |
| getServerStartDate | 无 | LocalDateTime | 获取服务器启动时间 |
| getDuration | LocalDateTime endDate, LocalDateTime nowDate | String | 计算两个时间差(天、时、分) |
| formatDuration | Long milliseconds | String | 将毫秒数转换为时间字符串 |
| getSecondsBetween | LocalDateTime startTime, LocalDateTime endTime | long | 计算两个日期时间相差的秒数 |
| secondsUntilEndOfDay | 无 | long | 获取到当日结束的秒数 |
LocalDate工具类-KPLocalDateUtil
LocalDate 工具类(处理日期,不含时间),其方法名与 KPDateUtil 保持一致,以便于项目迁移。提供日期格式化、解析、计算等功能。支持日期增减、日期比较、特殊日期获取等常用操作。
日期格式化与解析
提供多种日期格式化和解析方法,支持自定义格式模板。
// 日期格式化为字符串
String dateStr1 = KPLocalDateUtil.format(LocalDate.now(), "yyyy-MM-dd");
// 字符串解析为 LocalDate 对象
LocalDate date1 = KPLocalDateUtil.parse("2024-11-18", "yyyy-MM-dd");
// 转换日期格式
String dateStr2 = KPLocalDateUtil.format("2024-11-18", "yyyy-MM-dd", "yyyy/MM/dd");
日期增减操作
对日期进行增减天数、月份、年份等操作。
第二个参数 正数表示增加,负数表示减少。
// 增加天数
LocalDate result1 = KPLocalDateUtil.addDays(LocalDate.now(), 5);
// 增加月数
LocalDate result2 = KPLocalDateUtil.addMonths(LocalDate.now(), 2);
// 增加年数
LocalDate result3 = KPLocalDateUtil.addYears(LocalDate.now(), 1);
日期比较与获取最值
比较两个日期的大小,获取两个日期中的较小值或较大值。
LocalDate date1 = LocalDate.now();
LocalDate date2 = KPLocalDateUtil.addDays(LocalDate.now(), 5);
// 比较日期
int comparison = KPLocalDateUtil.compare(date1, date2);
// 获取较小值
LocalDate minDate = KPLocalDateUtil.min(date1, date2);
// 获取较大值
LocalDate maxDate = KPLocalDateUtil.max(date1, date2);
日期差值计算
计算两个日期之间的差值,包括天数差、月数差、年数差等。
LocalDate startDate = LocalDate.of(2024, 11, 1);
LocalDate endDate = LocalDate.of(2024, 11, 18);
// 计算天数差(不含结束日)
long days = KPLocalDateUtil.daysBetween(startDate, endDate);
// 计算天数差(包含结束日)
long daysIncludeToday = KPLocalDateUtil.daysBetweenIncludeToday(startDate, endDate);
// 计算月数差
long months = KPLocalDateUtil.getMonthsBetween(startDate, endDate);
// 计算年数差
long years = KPLocalDateUtil.getYearsBetween(startDate, endDate);
日期属性获取
获取日期的年份、月份、天数等属性信息。
LocalDate date = LocalDate.now();
// 获取年份
int year = KPLocalDateUtil.getYear(date);
// 获取月份(1-12)
int month = KPLocalDateUtil.getMonth(date);
// 获取天数(1-31)
int day = KPLocalDateUtil.getDay(date);
// 获取当月总天数
int daysOfMonth = KPLocalDateUtil.getDaysOfMonth(date);
// 获取当年总天数
int daysOfYear = KPLocalDateUtil.getDaysOfYear(date);
特殊日期获取
获取一些特殊日期,如月初、月末、周一、周日、指定年份第一天和最后一天等。
// 获取当月最小日期(1号)
LocalDate minDayOfMonth = KPLocalDateUtil.getMinDayOfMonth(LocalDate.now());
// 获取当月最大日期
LocalDate maxDayOfMonth = KPLocalDateUtil.getMaxDayOfMonth(LocalDate.now());
// 获取本周周一日期
String monday = KPLocalDateUtil.getMinDayOfWeek();
// 获取本周周日日期
String sunday = KPLocalDateUtil.getMaxDayOfWeek();
// 获取指定年份第一天
LocalDate firstDayOfYear = KPLocalDateUtil.getFirstDayOfYear(LocalDate.now());
// 获取指定年份最后一天
LocalDate lastDayOfYear = KPLocalDateUtil.getLastDayOfYear(LocalDate.now());
其他实用方法
提供一些其他实用的日期处理方法。
// 判断日期是否在指定范围内(包含边界)
boolean isBetween = KPLocalDateUtil.isBetween(LocalDate.now(),
LocalDate.now().minusDays(1), LocalDate.now().plusDays(1));
// 获取有效日期(若输入日期为null则返回当前日期,否则返回原日期)
LocalDate effectiveDate = KPLocalDateUtil.getEffectiveDate((LocalDate) null);
LocalDate effectiveDateFromString = KPLocalDateUtil.getEffectiveDate("2024-11-18");
核心方法列表
| 方法名 | 参数 | 返回值 | 说明 |
|---|---|---|---|
| format | LocalDate date, String pattern | String | 时间格式化为字符串 |
| format | String date, String pattern | String | 字符串日期格式化 |
| format | String date, String inputPattern, String outputPattern | String | 转换日期格式 |
| parse | String dateTimeString, String pattern | LocalDate | 字符串解析为 LocalDate 对象 |
| parse | String dateTimeString | LocalDate | 字符串解析为 LocalDate 对象(默认格式) |
| addDays | LocalDate date, int days | LocalDate | 日期增减天数 |
| addMonths | LocalDate date, int months | LocalDate | 时间增减月数 |
| addYears | LocalDate date, int years | LocalDate | 时间增减年数 |
| compare | LocalDate date1, LocalDate date2 | int | 时间比较 |
| min | LocalDate date1, LocalDate date2 | LocalDate | 获取两个时间的较小值 |
| max | LocalDate date1, LocalDate date2 | LocalDate | 获取两个时间的较大值 |
| daysBetween | LocalDate startDate, LocalDate endDate | long | 两个日期的天数差(不包含结束日) |
| daysBetweenIncludeToday | LocalDate startDate, LocalDate endDate | long | 两个日期的天数差(包含结束日) |
| getYear | LocalDate date | int | 获取日期的年份 |
| getMonth | LocalDate date | int | 获取日期的月份(1-12) |
| getDay | LocalDate date | int | 获取日期的天数(1-31) |
| getDaysOfMonth | LocalDate date | int | 获取当月的总天数 |
| getDaysOfYear | LocalDate date | int | 获取当年的总天数 |
| getMinDayOfMonth | LocalDate date | LocalDate | 获取当月最小日期(1号) |
| getMaxDayOfMonth | LocalDate date | LocalDate | 获取当月最大日期 |
| getMinDayOfWeek | 无 | String | 获取本周周一日期 |
| getMaxDayOfWeek | 无 | String | 获取本周最后一天日期 |
| getFirstDayOfYear | LocalDate date | LocalDate | 获取指定年份的第一天 |
| getLastDayOfYear | LocalDate date | LocalDate | 获取指定年份的最后一天 |
| getMonthsBetween | LocalDate beginDate, LocalDate endDate | long | 计算两个日期之间的月数差 |
| getYearsBetween | LocalDate beginDate, LocalDate endDate | long | 计算两个日期之间的年数差 |
| isBetween | LocalDate date, LocalDate start, LocalDate end | boolean | 判断日期是否在指定范围内(包含边界) |
| getEffectiveDate | LocalDate localDate | LocalDate | 获取有效日期(若输入日期为null则返回当前日期) |
| getEffectiveDate | String localDateString | LocalDate | 获取有效日期(字符串解析,异常时返回当前日期) |
EasyExcel工具类-KPEasyExcelUtil
EasyExcel操作工具类,用于简化Excel文件的导入导出操作。支持根据模板导出Excel文件,可处理复杂表头、数据填充等场景。
根据模板路径导出Excel
根据指定的模板路径和数据列表导出Excel文件。
List<User> userList = getUserList();
KPEasyExcelUtil.exportByTemplate("用户列表.xlsx", "/template/user.xlsx", userList);
参数说明:
filename: 导出的文件名tempLatePath: 模板文件路径list: 要导出的数据列表
根据模板流导出Excel
根据模板输入流和数据列表导出Excel文件。
List<User> userList = getUserList();
InputStream templateStream = getClass().getResourceAsStream("/template/user.xlsx");
KPEasyExcelUtil.exportByTemplate("用户列表.xlsx", templateStream, userList);
参数说明:
filename: 导出的文件名inputStream: 模板文件输入流list: 要导出的数据列表
根据模板流导出复杂Excel
根据模板输入流和多个数据对象导出复杂Excel文件,支持多组数据填充。
List<User> userList = getUserList();
List<Department> deptList = getDepartmentList();
InputStream templateStream = getClass().getResourceAsStream("/template/user_dept.xlsx");
KPEasyExcelUtil.exportByTemplate("用户部门列表.xlsx", templateStream, userList, deptList);
参数说明:
filename: 导出的文件名inputStream: 模板文件输入流obj: 可变参数,可以传入多个数据对象
从Minio导出Excel
从Minio存储中获取模板并导出Excel文件。
List<User> userList = getUserList();
KPEasyExcelUtil.minioExprotByTemplate("template-bucket", "user_template.xlsx", userList);
参数说明:
bucketName: Minio存储桶名称fileName: 模板文件名list: 要导出的数据列表
核心方法列表
| 方法名 | 参数 | 返回值 | 说明 |
|---|---|---|---|
| exportByTemplate | String filename, String tempLatePath, List<?> list | void | 根据模板路径导出Excel |
| exportByTemplate | String filename, InputStream inputStream, List<?> list | void | 根据模板流导出Excel |
| exportByTemplate | String filename, InputStream inputStream, Object... obj | void | 根据模板流导出复杂Excel |
| minioExprotByTemplate | String bucketName, String fileName, List<?> list | void | 从Minio导出Excel |
易鹏工具类
文件处理工具类-KPFileUtil
文件处理工具类,提供文件创建、删除、转换、下载等常用操作。
创建文件夹
创建文件夹,如果父目录不存在则一并创建。
boolean success = KPFileUtil.createFolder("D:/test/folder");
参数说明:
folderPath: 文件夹路径
返回值: 如果文件夹创建成功或已存在,返回 true
异常说明: 如果路径无效或无法创建文件夹,抛出 KPUtilException
判断是否为文件
判断指定路径是否为一个文件。
boolean isFile = KPFileUtil.isFile("D:/test/file.txt");
参数说明:
filePath: 文件路径
返回值: 如果是文件,返回 true
删除单个文件
删除单个文件。
boolean deleted = KPFileUtil.deleteFile("D:/test/file.txt");
参数说明:
filePath: 文件路径
返回值: 如果文件删除成功,返回 true
递归删除文件夹
递归删除文件夹及其所有内容。
KPFileUtil.deleteFolder("D:/test/folder");
参数说明:
folderPath: 文件夹路径
Base64与文件转换
将Base64字符串保存为文件
将 Base64 字符串解码并保存为文件。
String filePath = KPFileUtil.saveFileFromBase64("D:/test", "output.txt", "SGVsbG8gV29ybGQ=");
参数说明:
folderPath: 保存文件的文件夹路径fileName: 文件名base64Str: Base64 编码的字符串
返回值: 保存文件的完整路径
异常说明: 如果解码失败或文件写入失败,抛出 KPUtilException
Base64字符串转字节数组
Base64 字符串转字节数组(自动处理前缀)。
byte[] bytes = KPFileUtil.base64String2ByteFun("SGVsbG8gV29ybGQ=");
参数说明:
base64Str: Base64字符串
返回值: 字节数组
异常说明: 如果Base64字符串格式无效,抛出 IllegalArgumentException
字节数组转Base64字符串
字节数组转 Base64 字符串。
String base64 = KPFileUtil.byte2Base64StringFun(bytes);
参数说明:
bytes: 字节数组
返回值: Base64字符串
从文件读取字节数组
从文件读取字节数组。
byte[] bytes = KPFileUtil.getBytesByFile("D:/test/file.txt");
参数说明:
filePath: 文件路径
返回值: 字节数组
异常说明: 如果文件读取失败,抛出 KPUtilException
将字节数组写入文件
将字节数组写入文件。
KPFileUtil.writeBytesToFile(bytes, "D:/test", "output.txt");
参数说明:
bytes: 字节数组folderPath: 文件夹路径fileName: 文件名
异常说明: 如果文件写入失败,抛出 KPUtilException
网络文件操作
从URL读取字节流
从 URL 读取字节流。
byte[] bytes = KPFileUtil.readBytesFromUrl("https://example.com/image.jpg");
参数说明:
urlStr: URL地址
返回值: 字节数组
异常说明: 如果读取失败,抛出 KPUtilException
下载网络文件到本地
下载网络文件到本地。
File file = KPFileUtil.downloadFile("https://example.com/image.jpg", "D:/downloads");
参数说明:
urlStr: URL地址localFolderPath: 本地文件夹路径
返回值: 下载的文件对象
异常说明: 如果下载失败或文件写入失败,抛出 KPUtilException
二维码添加Logo
在二维码图片中间添加Logo
在二维码图片中间添加 Logo。
byte[] qrWithLogo = KPFileUtil.encodeWithLogo("https://example.com/qrcode.png", "iVBORw0KGgoAAAANSUhEUgAAAAUA");
参数说明:
qrCodeUrl: 二维码URLlogoBase64: Logo的Base64字符串
返回值: 添加Logo后的二维码图片字节数组
异常说明: 如果图片处理失败,抛出 KPUtilException
文件命名
处理重复文件名
处理重复文件名。
Map<String, Integer> existingNames = new HashMap<>();
String uniqueName = KPFileUtil.getUniqueName(existingNames, "file.txt");
参数说明:
existingNames: 已存在文件名的映射originalName: 原始文件名
返回值: 唯一文件名
目录遍历
查找目录下的所有文件
查找目录下的所有文件(递归)。
List<String> filePaths = new ArrayList<>();
KPFileUtil.findAllFiles(new File("D:/test"), filePaths);
参数说明:
dir: 目录对象filePaths: 文件路径列表
核心方法列表
| 方法名 | 参数 | 返回值 | 说明 |
|---|---|---|---|
| createFolder | String folderPath | boolean | 创建文件夹 |
| isFile | String filePath | boolean | 判断是否为文件 |
| deleteFile | String filePath | boolean | 删除单个文件 |
| deleteFolder | String folderPath | void | 递归删除文件夹 |
| saveFileFromBase64 | String folderPath, String fileName, String base64Str | String | 将Base64字符串保存为文件 |
| base64String2ByteFun | String base64Str | byte[] | Base64字符串转字节数组 |
| byte2Base64StringFun | byte[] bytes | String | 字节数组转Base64字符串 |
| getBytesByFile | String filePath | byte[] | 从文件读取字节数组 |
| writeBytesToFile | byte[] bytes, String folderPath, String fileName | void | 将字节数组写入文件 |
| readBytesFromUrl | String urlStr | byte[] | 从URL读取字节流 |
| downloadFile | String urlStr, String localFolderPath | File | 下载网络文件到本地 |
| encodeWithLogo | String qrCodeUrl, String logoBase64 | byte[] | 在二维码图片中间添加Logo |
| getUniqueName | Map<String, Integer> existingNames, String originalName | String | 处理重复文件名 |
| findAllFiles | File dir, List<String> filePaths | void | 查找目录下的所有文件 |
图标打印工具类-KPIconUtil
图标打印工具类,提供在控制台输出彩色文本和特殊图案的功能,支持自定义颜色、文本居中等特性。
颜色常量
工具类提供以下颜色常量,可用于设置输出文本的颜色:
| 常量名 | 说明 |
|---|---|
| RED | 红色 |
| GREEN | 绿色 |
| YELLOW | 黄色 |
| BLUE | 蓝色 |
| PURPLE | 紫色 |
| CYAN | 青色 |
| WHITE | 白色 |
打印自定义文本
支持打印自定义文本内容,可选择是否居中显示。
List<String> messages = Arrays.asList("欢迎使用系统", "版本: 1.0.0");
KPIconUtil.println(KPIconUtil.GREEN, messages);
参数说明:
color: 文本颜色,使用类中提供的颜色常量body: 要打印的文本内容列表isCenter: 是否居中显示,默认为true
打印成功图标
打印预定义的成功图标图案。
KPIconUtil.ok(KPIconUtil.GREEN);
参数说明:
color: 图标颜色,使用类中提供的颜色常量
核心方法列表
| 方法名 | 参数 | 返回值 | 说明 |
|---|---|---|---|
| println | String color, Listt<String> body | void | 打印自定义文本(默认居中) |
| println | String color, Listt<String> body, Boolean isCenter | void | 打印自定义文本 |
| ok | String color | void | 打印成功图标 |
身份证工具类-KPIDCardUtil
身份证工具类,提供根据身份证号码获取年龄和性别的功能。
根据身份证获取年龄
根据身份证号码计算并返回年龄。
Integer age = KPIDCardUtil.getUserAge("身份证号码");
参数说明:
idCard: 身份证号码
返回值: 年龄,如果身份证号码无效则返回null
根据身份证获取性别
根据身份证号码获取性别信息。
// 不带姓名的版本
String gender = KPIDCardUtil.getUserSex("身份证号码");
// 带姓名的版本
String genderWithPrefix = KPIDCardUtil.getUserSex("张三", "身份证号码");
参数说明:
realName: 真实姓名(带姓名的版本)idCard: 身份证号码
返回值:
- 不带姓名的版本返回"先生"或"女士"
- 带姓名的版本返回"张先生"或"张女士"(姓名首字+性别)
- 如果身份证号码无效则返回null
核心方法列表
| 方法名 | 参数 | 返回值 | 说明 |
|---|---|---|---|
| getUserAge | String idCard | Integer | 根据身份证获取年龄 |
| getUserSex | String idCard | String | 根据身份证获取性别 |
| getUserSex | String realName, String idCard | String | 根据姓名和身份证获取带前缀的性别称呼 |
IO工具类-KPIOUtil
IO操作工具类,提供文件下载、响应头设置等常用功能。该工具类基于Spring Web框架和Apache Tika库,能够自动识别文件MIME类型,正确处理中文文件名编码,支持本地文件和流文件的下载功能。
下载文件(InputStream方式)
通过HTTP响应下载文件输入流,自动设置正确的响应头信息
@RestController
@RequestMapping("/file")
public class FileController {
@GetMapping("/download")
public void downloadFile() throws IOException {
InputStream inputStream = getFileInputStream(); // 获取文件输入流
KPIOUtil.downloadFile(inputStream, "示例文件.pdf");
}
}
参数说明:
inputStream: 文件输入流(不能为空)originalFileName: 原始文件名(不能为空)
下载文件(指定HttpServletResponse)
通过指定的HTTP响应对象下载文件输入流,提供更多控制能力
@RestController
@RequestMapping("/file")
public class FileController {
@GetMapping("/downloadWithResponse")
public void downloadFile(HttpServletResponse response) throws IOException {
InputStream inputStream = getFileInputStream();
KPIOUtil.downloadFile(inputStream, "示例文件.pdf", response);
}
}
参数说明:
inputStream: 文件输入流(不能为空)originalFileName: 原始文件名(不能为空)response: HTTP响应对象
下载本地文件
直接下载服务器本地文件,自动处理文件路径和文件存在性检查
@RestController
@RequestMapping("/file")
public class FileController {
@GetMapping("/downloadLocal")
public void downloadLocalFile(HttpServletResponse response) throws IOException {
KPIOUtil.downloadLocalFile("/path/to/local/file.xlsx", response);
}
}
参数说明:
localFilePath: 本地文件路径response: HTTP响应对象
设置下载响应头
仅为HTTP响应设置文件下载所需的响应头信息,不处理文件内容传输
@RestController
@RequestMapping("/file")
public class FileController {
@GetMapping("/downloadWithHeader")
public void downloadWithHeader(HttpServletResponse response) throws IOException {
KPIOUtil.setDownloadResponseHeader("示例文件.pdf", response);
// 后续手动处理文件内容传输
}
@GetMapping("/downloadWithHeaderAndSize")
public void downloadWithHeaderAndSize(HttpServletResponse response) throws IOException {
File file = new File("/path/to/file.pdf");
KPIOUtil.setDownloadResponseHeader("示例文件.pdf", file.length(), response);
// 后续手动处理文件内容传输
}
}
参数说明:
fileName: 文件名(不含路径)fileSize: 文件大小(字节,可选)response: HTTP响应对象
核心方法列表
| 方法名 | 参数 | 返回值 | 说明 |
|---|---|---|---|
| downloadFile | InputStream inputStream, String originalFileName | void | 下载文件(使用当前请求的响应对象) |
| downloadFile | InputStream inputStream, String originalFileName, HttpServletResponse response | void | 下载文件(指定响应对象) |
| downloadLocalFile | String localFilePath, HttpServletResponse response | void | 下载本地文件 |
| setDownloadResponseHeader | String fileName, HttpServletResponse response | void | 设置下载响应头(不指定文件大小) |
| setDownloadResponseHeader | String fileName, long fileSize, HttpServletResponse response | void | 设置下载响应头(指定文件大小) |
IP地址工具类-KPIPUtil
IP地址与网络相关的工具类,提供获取客户端真实IP、判断内网IP、获取本地主机信息、端口检测等功能。该工具类专门用于处理Web应用中的IP地址相关问题,特别是在存在代理服务器的情况下准确获取客户端真实IP。
获取客户端IP地址
从 HttpServletRequest 对象中获取客户端的真实IP地址,会依次检查代理相关的HTTP头信息
@RestController
@RequestMapping("/api")
public class ApiController {
@GetMapping("/client-info")
public Map<String, Object> getClientInfo(HttpServletRequest request) {
Map<String, Object> result = new HashMap<>();
String clientIP = KPIPUtil.getClientIP(request);
result.put("clientIP", clientIP);
result.put("isInternal", KPIPUtil.isInternalIp(clientIP));
return result;
}
}
参数说明:
request: HttpServletRequest 对象
获取当前请求的客户端IP
通过 KPRequsetUtil 获取当前线程绑定的 HttpServletRequest 对象来获取客户端IP
String clientIP = KPIPUtil.getClientIP();
System.out.println("当前客户端IP: " + clientIP);
判断是否为内网IP
判断一个IP地址是否为内网/私有地址(支持IPv4)
boolean isInternal = KPIPUtil.isInternalIp("192.168.1.100");
if (isInternal) {
System.out.println("这是内网IP地址");
} else {
System.out.println("这是外网IP地址");
}
参数说明:
ip: 待判断的IP地址字符串
获取本地主机名
获取当前服务器的主机名
String hostName = KPIPUtil.getHostName();
System.out.println("服务器主机名: " + hostName);
获取本地IP地址
获取当前服务器的IP地址
String hostIp = KPIPUtil.getHostIp();
System.out.println("服务器IP地址: " + hostIp);
检查端口是否被占用
检查指定的主机和端口是否被占用
boolean isOccupied = KPIPUtil.isPortOccupied("localhost", 8080);
if (isOccupied) {
System.out.println("端口8080已被占用");
} else {
System.out.println("端口8080未被占用");
}
参数说明:
host: 主机名或IP地址port: 端口号
异常说明: 如果端口号无效(小于0或大于65535)会抛出 KPUtilException 异常
查找可用端口
从指定端口开始,自动查找第一个可用的端口
int availablePort = KPIPUtil.findAvailablePort("localhost", 8080);
if (availablePort != -1) {
System.out.println("找到可用端口: " + availablePort);
} else {
System.out.println("未找到可用端口");
}
参数说明:
host: 主机名或IP地址startPort: 起始端口号
返回值说明: 找到的可用端口号,如果未找到则返回-1
异常说明: 如果起始端口号无效会抛出 KPUtilException 异常
核心方法列表
| 方法名 | 参数 | 返回值 | 说明 |
|---|---|---|---|
| getClientIP | HttpServletRequest request | String | 从请求中获取客户端真实IP |
| getClientIP | 无 | String | 获取当前请求的客户端IP |
| isInternalIp | String ip | boolean | 判断是否为内网IP |
| getHostName | 无 | String | 获取本地主机名 |
| getHostIp | 无 | String | 获取本地IP地址 |
| isPortOccupied | String host, int port | boolean | 检查端口是否被占用 |
| findAvailablePort | String host, int startPort | int | 查找可用端口 |
使用示例
以下是一些典型的使用场景示例:
示例1:Web应用中获取客户端真实IP
@RestController
@RequestMapping("/security")
public class SecurityController {
@GetMapping("/ip-whitelist-check")
public ResponseEntity<String> checkIpWhitelist(HttpServletRequest request) {
// 获取客户端真实IP
String clientIp = KPIPUtil.getClientIP(request);
// 判断是否为内网IP
boolean isInternalIp = KPIPUtil.isInternalIp(clientIp);
// 检查是否在白名单中
if (isInternalIp || isIpInWhitelist(clientIp)) {
return ResponseEntity.ok("访问允许");
} else {
return ResponseEntity.status(HttpStatus.FORBIDDEN).body("访问拒绝");
}
}
private boolean isIpInWhitelist(String ip) {
// 实现IP白名单检查逻辑
List<String> whitelist = Arrays.asList("111.222.333.444", "555.666.777.888");
return whitelist.contains(ip);
}
}
示例2:服务器端口管理
@Component
public class PortManager {
private static final String HOST = "localhost";
private static final int DEFAULT_PORT = 8080;
public int getAvailablePort() {
// 检查默认端口是否可用
if (!KPIPUtil.isPortOccupied(HOST, DEFAULT_PORT)) {
return DEFAULT_PORT;
}
// 查找其他可用端口
int availablePort = KPIPUtil.findAvailablePort(HOST, DEFAULT_PORT + 1);
if (availablePort != -1) {
return availablePort;
}
throw new RuntimeException("未找到可用端口");
}
public void startServer() {
int port = getAvailablePort();
System.out.println("服务器将在端口 " + port + " 上启动");
// 启动服务器逻辑...
}
}
示例3:网络工具类
public class NetworkUtils {
public static Map<String, Object> getServerInfo() {
Map<String, Object> info = new HashMap<>();
info.put("hostName", KPIPUtil.getHostName());
info.put("hostIp", KPIPUtil.getHostIp());
info.put("timestamp", System.currentTimeMillis());
return info;
}
public static boolean isPortAvailable(String host, int port) {
try {
return !KPIPUtil.isPortOccupied(host, port);
} catch (Exception e) {
return false;
}
}
public static List<Integer> findAvailablePorts(String host, int startPort, int count) {
List<Integer> availablePorts = new ArrayList<>();
int currentPort = startPort;
while (availablePorts.size() < count && currentPort <= 65535) {
if (isPortAvailable(host, currentPort)) {
availablePorts.add(currentPort);
}
currentPort++;
}
return availablePorts;
}
}
JSON构建工具类-KPJSONFactoryUtil
JSON对象构建工具类,提供链式调用方式构建JSONObject对象。该工具类基于FastJSON2库,支持条件性添加键值对,并可将构建的JSON对象转换为JSONObject或JSON字符串。
构造器
创建JSON对象构建器实例
// 创建空的JSON对象
KPJSONFactoryUtil jsonFactory1 = new KPJSONFactoryUtil();
// 基于现有JSON对象创建
JSONObject existingJson = new JSONObject();
existingJson.put("name", "张三");
KPJSONFactoryUtil jsonFactory2 = new KPJSONFactoryUtil(existingJson);
添加键值对
向JSON对象中添加键值对,支持条件性添加
// 基本添加方式
KPJSONFactoryUtil jsonFactory = new KPJSONFactoryUtil()
.put("name", "张三")
.put("age", 25)
.put("email", "zhangsan@example.com");
// 条件性添加(当条件为true时添加)
boolean shouldAddPhone = true;
jsonFactory.put(shouldAddPhone, "phone", "13800138000");
// 条件性添加(当条件为false时不添加)
boolean shouldAddAddress = false;
jsonFactory.put(shouldAddAddress, "address", "北京市朝阳区");
参数说明:
key: 键名value: 键值isNull: 条件参数,当为true时添加键值对,当为false时不添加
构建JSON对象
将构建的JSON对象转换为JSONObject或JSON字符串
KPJSONFactoryUtil jsonFactory = new KPJSONFactoryUtil()
.put("name", "张三")
.put("age", 25);
// 构建为JSONObject
JSONObject jsonObject = jsonFactory.build();
// 构建为JSON字符串
String jsonString = jsonFactory.buildString();
核心方法列表
| 方法名 | 参数 | 返回值 | 说明 |
|---|---|---|---|
| KPJSONFactoryUtil() | 无 | 构造器 | 创建空的JSON对象构建器 |
| KPJSONFactoryUtil(JSONObject json) | JSONObject json | 构造器 | 基于现有JSON对象创建构建器 |
| put(String key, Object value) | String key, Object value | KPJSONFactoryUtil | 添加键值对 |
| put(Boolean isNull, String key, Object value) | Boolean isNull, String key, Object value | KPJSONFactoryUtil | 条件性添加键值对 |
| build() | 无 | JSONObject | 构建并返回JSONObject对象 |
| buildString() | 无 | String | 构建并返回JSON字符串 |
使用示例
以下是一些典型的使用场景示例:
示例1:构建API响应数据
@RestController
@RequestMapping("/api/user")
public class UserController {
@GetMapping("/{id}")
public String getUserInfo(@PathVariable Long id) {
// 模拟从数据库获取用户信息
User user = getUserFromDatabase(id);
// 使用KPJSONFactoryUtil构建响应数据
String response = new KPJSONFactoryUtil()
.put("code", 200)
.put("message", "success")
.put("data", new KPJSONFactoryUtil()
.put("id", user.getId())
.put("name", user.getName())
.put("email", user.getEmail())
.put(user.getPhone() != null, "phone", user.getPhone()) // 条件性添加
.put(user.getBirthday() != null, "birthday", user.getBirthday()) // 条件性添加
.build())
.buildString();
return response;
}
private User getUserFromDatabase(Long id) {
// 模拟数据库查询
return new User(id, "张三", "zhangsan@example.com", "13800138000", null);
}
}
示例2:构建复杂嵌套JSON对象
public class OrderService {
public JSONObject buildOrderDetail(Order order) {
return new KPJSONFactoryUtil()
.put("orderId", order.getId())
.put("orderNo", order.getOrderNo())
.put("status", order.getStatus())
.put("createTime", order.getCreateTime())
.put("totalAmount", order.getTotalAmount())
.put("customer", new KPJSONFactoryUtil()
.put("customerId", order.getCustomerId())
.put("customerName", order.getCustomerName())
.put("customerPhone", order.getCustomerPhone())
.build())
.put(order.getDeliveryAddress() != null, "deliveryAddress",
new KPJSONFactoryUtil()
.put("province", order.getDeliveryAddress().getProvince())
.put("city", order.getDeliveryAddress().getCity())
.put("district", order.getDeliveryAddress().getDistrict())
.put("detail", order.getDeliveryAddress().getDetail())
.build())
.put("items", buildOrderItems(order.getItems()))
.build();
}
private JSONArray buildOrderItems(List<OrderItem> items) {
JSONArray array = new JSONArray();
for (OrderItem item : items) {
JSONObject itemJson = new KPJSONFactoryUtil()
.put("productId", item.getProductId())
.put("productName", item.getProductName())
.put("quantity", item.getQuantity())
.put("price", item.getPrice())
.build();
array.add(itemJson);
}
return array;
}
}
示例3:构建日志信息
public class LogUtil {
public static String buildOperationLog(String operator, String operation,
Map<String, Object> details, boolean success) {
return new KPJSONFactoryUtil()
.put("timestamp", System.currentTimeMillis())
.put("operator", operator)
.put("operation", operation)
.put("success", success)
.put("details", details)
.put("ip", KPIPUtil.getClientIP()) // 结合其他工具类使用
.buildString();
}
// 使用示例
public void logUserLogin(String username) {
String logMessage = buildOperationLog(
username,
"USER_LOGIN",
Collections.singletonMap("loginTime", new Date()),
true
);
System.out.println(logMessage);
}
}
JSON工具类-KPJsonUtil
JSON操作工具类,提供JSON与Java对象之间的转换、JSON对象构建、集合转换等功能。该工具类基于FastJSON2库,支持各种常见的JSON处理需求,包括对象转换、列表转换、JSON构建等操作。
对象转换
将一个对象转换为指定类型的Java对象。
// 在PostService中使用示例
PostPO postPO = KPJsonUtil.toJavaObject(parameter, PostPO.class);
KPVerifyUtil.notNull(postPO.getPostId(), "请输入postId");
参数说明:
obj: 要转换的对象clazz: 目标类型的Class对象
返回值: 转换后的目标类型对象
JSONObject转换
将JSONObject转换为指定类型的Java对象。
// 在PostService中使用示例
PostPO postPO = KPJsonUtil.toJavaObject(jsonObject, PostPO.class);
参数说明:
jsonObject: 要转换的JSONObject对象clazz: 目标类型的Class对象
返回值: 转换后的目标类型对象
非空对象转换
将一个对象转换为JSON字符串后再转换为指定类型的Java对象,去除值为null的内容。
// 在PostService中使用示例
PostPO postPO = KPJsonUtil.toJavaObjectNotEmpty(postEditParamPO, PostPO.class);
参数说明:
obj: 要转换的对象clazz: 目标类型的Class对象
返回值: 转换后的目标类型对象
列表转换
将对象转换为指定类型的Java对象列表。
// 在PostService中使用示例
List<PostPO> postPOList = KPJsonUtil.toJavaObjectList(parameter, PostPO.class);
参数说明:
obj: 要转换的对象clazz: 列表元素类型的Class对象
返回值: 转换后的目标类型对象列表
字符串列表转换
将JSON字符串转换为指定类型的Java对象列表。
List<User> userList = KPJsonUtil.toJavaObjectList("[{\"name\":\"张三\"},{\"name\":\"李四\"}]", User.class);
参数说明:
jsonString: JSON格式的字符串clazz: 列表元素类型的Class对象
返回值: 转换后的目标类型对象列表
对象转JSON
将Java对象转换为JSONObject。
// 在PostService中使用示例
JSONObject jsonObject = KPJsonUtil.toJson(postPO);
参数说明:
obj: 要转换的Java对象
返回值: 转换后的JSONObject对象
字符串转JSON
将JSON字符串转换为JSONObject。
JSONObject jsonObject = KPJsonUtil.toJson("{\"name\":\"张三\",\"age\":25}");
参数说明:
jsonStr: JSON格式的字符串
返回值: 转换后的JSONObject对象
对象转JSON字符串
将Java对象转换为JSON格式的字符串。
String jsonString = KPJsonUtil.toJsonString(postPO);
参数说明:
obj: 要转换的Java对象
返回值: JSON格式的字符串
合并JSON对象
将多个JSONObject合并为一个JSONObject。
JSONObject mergedJson = KPJsonUtil.mergeJson(json1, json2, json3);
参数说明:
json: 可变参数,要合并的JSONObject对象
返回值: 合并后的JSONObject对象
JSON转HashMap
将JSONObject转换为HashMap。
HashMap<String, Object> map = KPJsonUtil.toHashMap(jsonObject);
参数说明:
json: 要转换的JSONObject对象
返回值: 转换后的HashMap对象
JSON转TreeMap
将JSONObject转换为按字典顺序排序的TreeMap。
TreeMap<String, Object> treeMap = KPJsonUtil.toTreeMap(jsonObject);
参数说明:
json: 要转换的JSONObject对象
返回值: 转换后的TreeMap对象
判断字符串是否为JSON
判断字符串是否为有效的JSON格式。
boolean isValidJson = KPJsonUtil.isJson("{\"name\":\"张三\"}");
参数说明:
jsonStr: 待判断的字符串
返回值: 如果是有效的JSON格式返回true,否则返回false
核心方法列表
| 方法名 | 参数 | 返回值 | 说明 |
|---|---|---|---|
| toJavaObject | Object obj, Class<T> clazz | T | 将对象转换为指定类型的Java对象 |
| toJavaObject | JSONObject jsonObject, Class<T> clazz | T | 将JSONObject转换为指定类型的Java对象 |
| toJavaObjectNotEmpty | Object obj, Class<T> clazz | T | 将对象转换为指定类型的Java对象并去除null值 |
| toJavaObjectList | Object obj, Class<T> clazz | List<T> | 将对象转换为指定类型的Java对象列表 |
| toJavaObjectList | String jsonString, Class<T> clazz | List<T> | 将JSON字符串转换为指定类型的Java对象列表 |
| toJson | Object obj | JSONObject | 将Java对象转换为JSONObject |
| toJson | String jsonStr | JSONObject | 将JSON字符串转换为JSONObject |
| toJsonString | Object obj | String | 将Java对象转换为JSON字符串 |
| mergeJson | JSONObject... json | JSONObject | 合并多个JSONObject |
| toHashMap | JSONObject json | HashMap | 将JSONObject转换为HashMap |
| toTreeMap | JSONObject json | TreeMap | 将JSONObject转换为TreeMap |
| isJson | String jsonStr | boolean | 判断字符串是否为JSON格式 |
JWT工具类-KPJWTUtil
JWT(JSON Web Token)操作工具类,提供Token生成、验证和解析功能。该工具类基于auth0 JWT库,用于生成和验证JWT Token,支持设置过期时间、主题等信息。
生成Token
根据指定值生成JWT Token
String token = KPJWTUtil.createToken("user123");
参数说明:
val: 要存储在Token中的值
返回值: 生成的JWT Token字符串
异常说明: 如果生成Token过程中出现异常,会抛出KPServiceException
验证Token
验证JWT Token的有效性
boolean isValid = KPJWTUtil.verifyToken(token);
if (isValid) {
System.out.println("Token有效");
} else {
System.out.println("Token无效或已过期");
}
参数说明:
token: 待验证的JWT Token字符串
返回值: 如果Token有效返回true,否则返回false
解析Token
解析JWT Token并获取其中的声明信息
Claim claim = KPJWTUtil.parseToken(token);
String value = claim.asString();
参数说明:
token: 待解析的JWT Token字符串
返回值: Token中的声明信息(Claim对象)
常量说明
| 常量名 | 值 | 说明 |
|---|---|---|
| EXPIRE_TIME | 60 * 60 * 24 * 10 | Token过期时间(10天,单位秒) |
| KEY | "authToken" | Token中存储值的键名 |
| SECRET | "Y29tLnNtYWxsLnNob3BwaW5n" | 加密密钥 |
| SUBJECT | "GALAXY-DATA-SYSTEM-CA" | Token主题 |
核心方法列表
| 方法名 | 参数 | 返回值 | 说明 |
|---|---|---|---|
| createToken | String val | String | 生成JWT Token |
| verifyToken | String token | boolean | 验证JWT Token |
| parseToken | String token | Claim | 解析JWT Token |
MD5工具类-KPMD5Util
MD5加密工具类,提供字符串MD5加密、盐值生成和密码加密功能。该工具类基于Java安全消息摘要算法实现,支持多次加密和加盐处理,增强数据安全性。
MD5加密
对字符串进行指定次数的MD5加密
// 对字符串进行3次MD5加密
String encrypted = KPMD5Util.md5Encryption("password", 3);
参数说明:
str: 需要加密的字符串num: 加密次数,建议最少3次以增强安全性
返回值: 加密后的密文字符串
异常说明: 如果加密过程中出现异常,会抛出KPServiceException
生成随机盐值
生成16位随机盐值,用于密码加密
String salt = KPMD5Util.randomSalt();
返回值: 16位随机盐值字符串
密码加密
使用盐值对密码进行加密处理
String salt = KPMD5Util.randomSalt();
String encryptedPassword = KPMD5Util.encryption("password", salt);
参数说明:
password: 需要加密的密码salt: 盐值
返回值: 加密后的密码字符串
核心方法列表
| 方法名 | 参数 | 返回值 | 说明 |
|---|---|---|---|
| md5Encryption | String str, int num | String | 对字符串进行指定次数的MD5加密 |
| randomSalt | 无 | String | 生成16位随机盐值 |
| encryption | String password, String salt | String | 使用盐值对密码进行加密 |
Minio工具类-KPMinioUtil
Minio对象存储操作工具类,提供存储桶管理、对象管理、文件上传下载等功能。该工具类基于Minio Java SDK实现,支持对Minio服务进行完整的对象存储操作。
存储桶管理
检查存储桶是否存在
检查指定名称的存储桶是否存在
boolean exists = KPMinioUtil.bucketExists("my-bucket");
参数说明:
bucketName: 存储桶名称
返回值: 如果存储桶存在返回true,否则返回false
异常说明: 如果检查过程中出现异常,会抛出KPUtilException
创建存储桶
创建指定名称的存储桶
KPMinioUtil.createBucket("my-bucket");
参数说明:
bucketName: 存储桶名称
异常说明: 如果创建过程中出现异常,会抛出KPUtilException
设置存储桶权限
设置存储桶的访问权限(公有或私有)
// 设置为公有桶
KPMinioUtil.setBucketAccessPolicy("my-bucket", true);
// 设置为私有桶
KPMinioUtil.setBucketAccessPolicy("my-bucket", false);
参数说明:
bucketName: 存储桶名称isPublic: 是否公有桶,true为公有桶,false为私有桶
异常说明: 如果设置权限过程中出现异常,会抛出KPUtilException
列出所有存储桶名称
获取所有存储桶的名称列表
List<String> bucketNames = KPMinioUtil.listBucketNames();
返回值: 存储桶名称列表
异常说明: 如果获取过程中出现异常,会抛出KPUtilException
列出所有存储桶
获取所有存储桶的详细信息列表
List<Bucket> buckets = KPMinioUtil.listBuckets();
返回值: 存储桶详细信息列表
异常说明: 如果获取过程中出现异常,会抛出KPUtilException
删除存储桶
删除指定名称的存储桶
boolean deleted = KPMinioUtil.removeBucket("my-bucket");
参数说明:
bucketName: 存储桶名称
返回值: 如果删除成功返回true,否则返回false
异常说明: 如果删除过程中出现异常,会抛出KPUtilException
对象列表操作
列出存储桶中的所有对象名称
列出指定存储桶中的所有对象名称
// 递归查询所有文件
List<String> objectNames = KPMinioUtil.listObjectNames("my-bucket", true);
// 仅查询当前层级文件
List<String> objectNames = KPMinioUtil.listObjectNames("my-bucket", false);
参数说明:
bucketName: 存储桶名称isFile: 是否递归查询,true为递归查询所有文件,false为仅查询当前层级
返回值: 对象名称列表
列出存储桶中的所有对象
列出指定存储桶中的所有对象详细信息
Iterable<Result<Item>> objects = KPMinioUtil.listObjects("my-bucket", true);
参数说明:
bucketName: 存储桶名称isFile: 是否递归查询,true为递归查询所有文件,false为仅查询当前层级
返回值: 对象详细信息迭代器
对象上传操作
通过文件上传对象
通过本地文件路径上传对象到存储桶
boolean success = KPMinioUtil.putObject("my-bucket", "my-object.txt", "/path/to/local/file.txt");
参数说明:
bucketName: 存储桶名称objectName: 对象名称fileName: 本地文件全路径
返回值: 如果上传成功返回true,否则返回false
异常说明: 如果上传过程中出现异常,会抛出KPUtilException
通过InputStream上传对象
通过输入流上传对象到存储桶
boolean success = KPMinioUtil.putObject("my-bucket", "my-object.txt", inputStream);
参数说明:
bucketName: 存储桶名称objectName: 对象名称stream: 输入流
返回值: 如果上传成功返回true,否则返回false
异常说明: 如果上传过程中出现异常,会抛出KPUtilException
对象下载操作
获取对象(以流形式)
以流的形式获取存储桶中的对象
InputStream inputStream = KPMinioUtil.getObject("my-bucket", "my-object.txt");
参数说明:
bucketName: 存储桶名称objectName: 对象名称
返回值: 对象输入流
异常说明: 如果获取过程中出现异常,会抛出KPUtilException
获取对象(断点下载)
以流的形式获取存储桶中的对象,支持断点下载
InputStream inputStream = KPMinioUtil.getObject("my-bucket", "my-object.txt", 0, 1024L);
参数说明:
bucketName: 存储桶名称objectName: 对象名称offset: 起始字节位置length: 要读取的长度
返回值: 对象输入流
异常说明: 如果获取过程中出现异常,会抛出KPUtilException
下载对象到本地文件
将存储桶中的对象下载并保存到本地文件
boolean success = KPMinioUtil.getObject("my-bucket", "my-object.txt", "/path/to/save/file.txt");
参数说明:
bucketName: 存储桶名称objectName: 对象名称fileName: 本地文件保存路径
返回值: 如果下载成功返回true,否则返回false
异常说明: 如果下载过程中出现异常,会抛出KPUtilException
对象删除操作
删除对象
删除存储桶中的指定对象
boolean deleted = KPMinioUtil.removeObject("my-bucket", "my-object.txt");
参数说明:
bucketName: 存储桶名称objectName: 对象名称
返回值: 如果删除成功返回true,否则返回false
异常说明: 如果删除过程中出现异常,会抛出KPUtilException
批量删除对象
批量删除存储桶中的多个对象
List<String> objectNames = Arrays.asList("object1.txt", "object2.txt");
List<String> deleteErrors = KPMinioUtil.removeObject("my-bucket", objectNames);
参数说明:
bucketName: 存储桶名称objectNames: 要删除的对象名称列表
返回值: 删除失败的对象名称列表,全部删除成功则返回空列表
对象复制操作
复制对象
将对象从一个位置复制到另一个位置
ObjectWriteResponse response = KPMinioUtil.copyObject("source-bucket", "source-object", "target-bucket", "target-object");
参数说明:
bucketName: 源存储桶名称objectName: 源对象名称newBucketName: 目标存储桶名称newObjectName: 目标对象名称
返回值: 对象写入响应
异常说明: 如果复制过程中出现异常,会抛出KPUtilException
复制临时文件
将临时桶中的文件复制到业务桶中
String newFilePath = KPMinioUtil.copyTemporaryFile("folder", "temp-bucket/temp-file.txt", "business-bucket");
参数说明:
folder: 保存的文件夹filePath: 临时文件地址newBucketName: 新的存储桶名称
返回值: 新的文件路径
异常说明: 如果复制过程中出现异常,会抛出KPServiceException
对象URL操作
生成对象访问URL(按小时)
生成对象的预签名访问URL
String url = KPMinioUtil.getUrl("my-bucket", "my-object.txt", 24);
参数说明:
bucketName: 存储桶名称objectName: 对象名称hours: 失效时间(小时)
返回值: 预签名访问URL
异常说明: 如果生成URL过程中出现异常,会抛出KPUtilException
生成对象访问URL(按时间单位)
生成对象的预签名访问URL
String url = KPMinioUtil.getUrl("my-bucket", "my-object.txt", 1, TimeUnit.DAYS);
参数说明:
bucketName: 存储桶名称objectName: 对象名称time: 失效时间timeUnit: 时间单位
返回值: 预签名访问URL
异常说明: 如果生成URL过程中出现异常,会抛出KPUtilException
对象元数据操作
获取对象元数据
获取对象的元数据信息
StatObjectResponse metadata = KPMinioUtil.statObject("my-bucket", "my-object.txt");
参数说明:
bucketName: 存储桶名称objectName: 对象名称
返回值: 对象元数据信息
异常说明: 如果获取过程中出现异常,会抛出KPUtilException
核心方法列表
| 方法名 | 参数 | 返回值 | 说明 |
|---|---|---|---|
| bucketExists | String bucketName | boolean | 检查存储桶是否存在 |
| createBucket | String bucketName | void | 创建存储桶 |
| setBucketAccessPolicy | String bucketName, Boolean isPublic | void | 设置存储桶权限 |
| listBucketNames | 无 | List<String> | 列出所有存储桶名称 |
| listBuckets | 无 | List<Bucket> | 列出所有存储桶 |
| removeBucket | String bucketName | boolean | 删除存储桶 |
| listObjectNames | String bucketName, Boolean isFile | List<String> | 列出存储桶中的所有对象名称 |
| listObjects | String bucketName, Boolean isFile | Iterable<Result<Item>> | 列出存储桶中的所有对象 |
| putObject | String bucketName, String objectName, String fileName | boolean | 通过文件上传对象 |
| putObject | String bucketName, String objectName, InputStream stream | boolean | 通过输入流上传对象 |
| getObject | String bucketName, String objectName | InputStream | 获取对象(以流形式) |
| getObject | String bucketName, String objectName, long offset, Long length | InputStream | 获取对象(断点下载) |
| getObject | String bucketName, String objectName, String fileName | boolean | 下载对象到本地文件 |
| removeObject | String bucketName, String objectName | boolean | 删除对象 |
| removeObject | String bucketName, List<String> objectNames | List<String> | 批量删除对象 |
| copyObject | String bucketName, String objectName, String newBucketName, String newObjectName | ObjectWriteResponse | 复制对象 |
| copyTemporaryFile | String folder, String filePath, String newBucketName | String | 复制临时文件 |
| getUrl | String bucketName, String objectName, Integer hours | String | 生成对象访问URL(按小时) |
| getUrl | String bucketName, String objectName, Integer time, TimeUnit timeUnit | String | 生成对象访问URL(按时间单位) |
| statObject | String bucketName, String objectName | StatObjectResponse | 获取对象元数据 |
数值工具类-KPNumberUtil
数值操作工具类,提供随机数生成、字符串中数字提取、唯一编号生成等功能。
获取随机数
获取指定范围内的随机整数
int randomNum = KPNumberUtil.rod(1, 100);
参数说明:
start: 开始数(包含)end: 结束数(包含)
返回值: 指定范围内的随机整数
随机生成指定位数的随机数
随机生成指定位数的随机数,可选择是否以时间开头
// 生成10位随机数
String randomNumber = KPNumberUtil.random(10, null);
// 生成以当前日期时间开头的15位随机数
String dateTimeRandom = KPNumberUtil.random(15, "yyyyMMddHHmmss");
参数说明:
length: 随机数总长度pattern: 时间格式,如果以时间开头则输入格式如"yyyyMMddHHmmss",为空则纯随机数
返回值: 生成的随机数字符串
查询字符串中的数字
提取字符串中的所有数字
List<Integer> numbers = KPNumberUtil.queryNumber("abc123def456ghi");
// 返回 [123, 456]
参数说明:
str: 要查询的字符串
返回值: 字符串中包含的所有数字列表
查询字符串中的数字及后续内容
提取字符串中的数字及其后续内容,通常用于解析带有编号的内容
Map<Integer, String> resultMap = KPNumberUtil.queryNumberSplit("1.第一项内容 2.第二项内容 3.第三项内容");
参数说明:
str: 要查询的字符串
返回值: 以数字为key,数字后内容为value的Map
生成唯一编号
通过Redis生成唯一编号,保证全局唯一性
String uniqueNumber = KPNumberUtil.createNumber("PROJECT_NAME", "ORDER");
// 返回类似: ORDER-2025112014-8567
参数说明:
project: 项目名称,一般是RedisSecurityConstant或者RedisConstant里面的内容prefix: 编号前缀
返回值: 生成的唯一编号字符串,格式为"前缀-日期时间-随机数"
核心方法列表
| 方法名 | 参数 | 返回值 | 说明 |
|---|---|---|---|
| rod | int start, int end | int | 获取指定范围内的随机整数 |
| random | int length, String pattern | String | 随机生成指定位数的随机数 |
| queryNumber | String str | List<Integer> | 提取字符串中的所有数字 |
| queryNumberSplit | String str | Map<Integer, String> | 提取字符串中的数字及其后续内容 |
| createNumber | String project, String prefix | String | 通过Redis生成唯一编号 |
HTTP请求工具类-KPOkHttpHelperUtil
基于OkHttp封装的HTTP请求工具类,提供GET、POST等常用HTTP方法的便捷调用,支持JSON、XML、表单等多种数据格式,内置日志记录和性能统计功能。
GET请求
执行HTTP GET请求,支持添加请求头。
// 简单GET请求
String result = KPOkHttpHelperUtil.get("https://api.example.com/users");
// 带请求头的GET请求
HashMap<String, String> headers = new HashMap<>();
headers.put("Authorization", "Bearer token");
String result = KPOkHttpHelperUtil.get("https://api.example.com/users", headers);
// 以JSON对象形式获取响应
JSONObject jsonResult = KPOkHttpHelperUtil.getByJson("https://api.example.com/users", headers);
// 带认证token的GET请求
String result = KPOkHttpHelperUtil.get("https://api.example.com/users", "Authorization", "Bearer token");
参数说明:
url: 请求地址headerMap: 请求头参数MaptokenName: 认证token名称token: 认证token值
返回值: 服务器响应内容
POST请求
执行HTTP POST请求,支持多种数据格式。
POST XML数据
String xmlData = "<user><name>张三</name><age>25</age></user>";
String result = KPOkHttpHelperUtil.postXml("https://api.example.com/users", xmlData);
参数说明:
url: 请求地址xml: XML格式的请求数据
返回值: 服务器响应内容
POST JSON数据
// 简单POST JSON请求
String jsonData = "{\"name\":\"张三\",\"age\":25}";
String result = KPOkHttpHelperUtil.postJson("https://api.example.com/users", jsonData);
// 以JSON对象形式获取响应
JSONObject jsonResult = KPOkHttpHelperUtil.postJsonByJson("https://api.example.com/users", jsonData);
// 带认证token的POST JSON请求
String result = KPOkHttpHelperUtil.postJson("https://api.example.com/users", jsonData, "Authorization", "Bearer token");
// 带请求头的POST JSON请求
HashMap<String, String> headers = new HashMap<>();
headers.put("Content-Type", "application/json");
String result = KPOkHttpHelperUtil.postJson("https://api.example.com/users", jsonData, headers);
// 带请求头并以JSON对象形式获取响应
JSONObject jsonResult = KPOkHttpHelperUtil.postJsonByJson("https://api.example.com/users", jsonData, headers);
参数说明:
url: 请求地址json: JSON格式的请求数据tokenName: 认证token名称token: 认证token值headerMap: 请求头参数Map
返回值: 服务器响应内容
POST表单数据
// POST表单数据
String formData = "name=张三&age=25";
String result = KPOkHttpHelperUtil.postForm("https://api.example.com/users", formData);
// 带请求头的POST表单数据
HashMap<String, String> headers = new HashMap<>();
headers.put("Content-Type", "application/x-www-form-urlencoded");
String result = KPOkHttpHelperUtil.postForm("https://api.example.com/users", formData, headers);
参数说明:
url: 请求地址request: 表单格式的请求数据headerMap: 请求头参数Map
返回值: 服务器响应内容
获取完整响应信息
获取HTTP响应的完整信息,包括响应头和响应体。
String jsonData = "{\"name\":\"张三\",\"age\":25}";
KPOkHttpHelperUtil.ResponseBody response = KPOkHttpHelperUtil.postJsonAll("https://api.example.com/users", jsonData);
String responseBody = response.getResponseStr();
Headers responseHeaders = response.getHeaders();
参数说明:
url: 请求地址json: JSON格式的请求数据headMap: 请求头参数Map
返回值: ResponseBody对象,包含响应内容和响应头信息
构造器
创建KPOkHttpHelperUtil实例,可控制是否打印日志。
// 默认构造器,启用日志打印
KPOkHttpHelperUtil util1 = new KPOkHttpHelperUtil();
// 指定是否打印日志
KPOkHttpHelperUtil util2 = new KPOkHttpHelperUtil(false); // 禁用日志打印
参数说明:
isPringLog: 是否打印日志,默认为true
核心方法列表
| 方法名 | 参数 | 返回值 | 说明 |
|---|---|---|---|
| get | String url | String | 执行GET请求 |
| get | String url, HashMap headerMap | String | 带请求头的GET请求 |
| getByJson | String url, HashMap headerMap | JSONObject | 执行GET请求并以JSON对象形式返回 |
| get | String url, String tokenName, String token | String | 带认证token的GET请求 |
| postXml | String url, String xml | String | POST XML数据 |
| postJson | String url, String json | String | POST JSON数据 |
| postJsonByJson | String url, String json | JSONObject | POST JSON数据并以JSON对象形式返回 |
| postJson | String url, String json, String tokenName, String token | String | 带认证token的POST JSON请求 |
| postJson | String url, String json, HashMap headerMap | String | 带请求头的POST JSON请求 |
| postJsonByJson | String url, String json, HashMap headerMap | JSONObject | 带请求头的POST JSON请求并以JSON对象形式返回 |
| postJsonAll | String url, String json, HashMap headMap | ResponseBody | 获取完整响应信息 |
| postJsonAll | String url, String json | ResponseBody | 获取完整响应信息(无请求头) |
| postForm | String url, String request | String | POST表单数据 |
| postForm | String url, String request, HashMap headerMap | String | 带请求头的POST表单数据 |
响应体类-ResponseBody
包含HTTP响应的完整信息。
核心属性
| 属性名 | 类型 | 说明 |
|---|---|---|
| responseStr | String | 响应体内容 |
| headers | Headers | 响应头信息 |
RabbitMQ工具类-KPRabbitMqUtil
RabbitMQ消息队列操作工具类,提供发送Dead队列消息、Fanout队列消息以及批量发送消息等功能。该工具类基于Spring AMQP实现,简化了RabbitMQ的使用,支持消息确认机制。
发送Dead队列消息
发送单条消息到指定的Dead队列交换机和路由键
// 发送字符串消息
KPRabbitMqUtil.sendDeadMessage("exchangeName", "routingKey", "Hello World");
// 发送对象消息
User user = new User("张三", 25);
KPRabbitMqUtil.sendDeadMessage("exchangeName", "routingKey", user);
参数说明:
exchangeName: 交换机名称routingKey: 路由键msg: 要发送的消息对象
批量发送Dead队列消息
批量发送多条消息到指定的Dead队列交换机和路由键
List<User> users = Arrays.asList(
new User("张三", 25),
new User("李四", 30),
new User("王五", 35)
);
KPRabbitMqUtil.sendDeadMessageList("exchangeName", "routingKey", users);
参数说明:
exchangeName: 交换机名称routingKey: 路由键msgs: 要发送的消息对象列表
发送Fanout队列消息
发送单条消息到指定的Fanout交换机(广播模式,忽略路由键)
// 发送字符串消息
KPRabbitMqUtil.sendFanoutMessage("fanoutExchange", "Hello World");
// 发送对象消息
User user = new User("张三", 25);
KPRabbitMqUtil.sendFanoutMessage("fanoutExchange", user);
参数说明:
exchangeName: Fanout交换机名称msg: 要发送的消息对象
批量发送Fanout队列消息
批量发送多条消息到指定的Fanout交换机(广播模式,忽略路由键)
List<User> users = Arrays.asList(
new User("张三", 25),
new User("李四", 30),
new User("王五", 35)
);
KPRabbitMqUtil.sendFanoutMessageList("fanoutExchange", users);
参数说明:
exchangeName: Fanout交换机名称msgs: 要发送的消息对象列表
核心方法列表
| 方法名 | 参数 | 返回值 | 说明 |
|---|---|---|---|
| sendDeadMessage | String exchangeName, String routingKey, Object msg | void | 发送单条Dead队列消息 |
| sendDeadMessageList | String exchangeName, String routingKey, List<?> msgs | void | 批量发送Dead队列消息 |
| sendFanoutMessage | String exchangeName, Object msg | void | 发送单条Fanout队列消息 |
| sendFanoutMessageList | String exchangeName, List<?> msgs | void | 批量发送Fanout队列消息 |
Redis工具类-KPRedisUtil
Redis操作工具类,提供对Redis中String、List、Set、ZSet、Hash等多种数据结构的操作方法,以及键管理、过期时间设置、分布式锁等功能。该工具类基于Spring Data Redis实现,简化了Redis的使用。
String类型操作
对Redis中String类型数据的存取操作。
// 设置键值对(永久保存,不推荐)
KPRedisUtil.set("key", "value");
// 设置键值对并指定过期时间(秒)
KPRedisUtil.set("key", "value", 3600);
// 设置键值对并指定过期时间和单位
KPRedisUtil.set("key", "value", 1, TimeUnit.HOURS);
// 获取键对应的值
Object value = KPRedisUtil.get("key");
// 获取键对应的字符串值
String strValue = KPRedisUtil.getString("key");
// 获取键对应的整数值
Integer intValue = KPRedisUtil.getInteger("key");
参数说明:
key: 键名value: 要存储的值timeout: 过期时间timeUnit: 时间单位
返回值:
set方法无返回值get方法返回Object类型的值getString方法返回String类型的值getInteger方法返回Integer类型的值
List类型操作
对Redis中List类型数据的存取操作。
// 在指定位置设置List元素
KPRedisUtil.setList("listKey", 0, "value");
// 从左侧推入元素到List
KPRedisUtil.setListByLeftPush("listKey", "value1");
// 批量从左侧推入元素到List
List<String> list = Arrays.asList("value1", "value2", "value3");
KPRedisUtil.setListByLeftPushAll("listKey", list);
// 从右侧推入元素到List
KPRedisUtil.setListByRightPush("listKey", "value");
// 批量从右侧推入元素到List
List<String> list2 = Arrays.asList("value1", "value2", "value3");
KPRedisUtil.setListByRightPushAll("listKey", list2);
// 获取List所有元素
List listValues = KPRedisUtil.getList("listKey");
// 获取List指定范围元素
List listRange = KPRedisUtil.getList("listKey", 0, 5);
// 获取List大小
long listSize = KPRedisUtil.getListSize("listKey");
// 删除List中指定值的元素
Long removedCount = KPRedisUtil.removeList("listKey", "value");
参数说明:
key: List的键名index: List中元素的索引位置value: 要存储或删除的值obj: 要推入List的对象list: 要批量推入的元素列表start: 起始位置end: 结束位置
返回值:
setList、setListByLeftPush、setListByLeftPushAll、setListByRightPush、setListByRightPushAll方法无返回值getList方法返回List类型getListSize方法返回long类型removeList方法返回Long类型
Set类型操作
对Redis中Set类型数据的存取操作。
// 添加元素到Set
KPRedisUtil.setSet("setKey", "value1", "value2", "value3");
// 获取Set大小
long setSize = KPRedisUtil.getSetSize("setKey");
// 获取Set所有元素
Set setValues = KPRedisUtil.setSet("setKey");
// 删除Set中指定元素
long removedCount = KPRedisUtil.removeSet("setKey", "value1", "value2");
参数说明:
key: Set的键名values: 要添加到Set中的值,可变参数value: 要从Set中删除的值
返回值:
setSet方法无返回值getSetSize方法返回long类型setSet方法返回Set类型removeSet方法返回long类型
ZSet类型操作(有序集合)
对Redis中ZSet类型数据的存取操作。
// 添加元素到有序集合
KPRedisUtil.setZSet("zsetKey", "value", 1.0);
// 批量添加元素到有序集合
Set<Tuple> tuples = new HashSet<>();
tuples.add(new DefaultTuple("value1".getBytes(), 1.0));
tuples.add(new DefaultTuple("value2".getBytes(), 2.0));
KPRedisUtil.setZSet("zsetKey", tuples);
// 获取有序集合指定范围元素
Set zsetRange = KPRedisUtil.getZSet("zsetKey", 0, -1);
// 获取有序集合所有元素
Set zsetValues = KPRedisUtil.getZSet("zsetKey");
// 获取有序集合大小
long zsetSize = KPRedisUtil.getZSetSize("zsetKey");
参数说明:
key: 有序集合的键名value: 要添加到有序集合中的值score: 排序分数set: 包含元素和分数的Set集合start: 起始位置end: 结束位置
返回值:
setZSet方法无返回值getZSet方法返回Set类型getZSetSize方法返回long类型
Hash类型操作
对Redis中Hash类型数据的存取操作。
// 设置Hash中的字段值
KPRedisUtil.setHash("hashKey", "field1", "value1");
// 获取Hash中字段的大小
KPRedisUtil.getHashSize("hashKey");
// 获取Hash中指定字段的值
Object fieldValue = KPRedisUtil.getHash("hashKey", "field1");
// 获取Hash中所有字段和值
Map<String, Object> hashEntries = KPRedisUtil.getHash("hashKey");
// 删除Hash中指定字段
Long removedCount = KPRedisUtil.removeHash("hashKey", "field1", "field2");
参数说明:
key: Hash的键名hashKey: Hash中的字段名value: 要存储的值hashKeys: 要删除的字段名,可变参数
返回值:
setHash、getHashSize方法无返回值getHash方法返回Object或Map类型removeHash方法返回Long类型
通用操作
Redis通用操作方法。
// 判断键是否存在
boolean exists = KPRedisUtil.hasKey("key");
// 获取键的过期时间(秒)
long ttl = KPRedisUtil.ttl("key");
// 设置键的过期时间(秒)
Boolean expireResult = KPRedisUtil.expire("key", 3600);
// 设置键的过期时间(指定单位)
Boolean expireResult2 = KPRedisUtil.expire("key", 1, TimeUnit.HOURS);
// 增加键的值
long newValue = KPRedisUtil.incr("key", 1);
// 查找匹配模式的键
Set<String> keys = KPRedisUtil.keys("user:*");
// 删除键
KPRedisUtil.remove("key");
// 批量删除键
KPRedisUtil.removeBacth("user:");
// 获取键对应值的大小
long size = KPRedisUtil.getSize("key");
// 获取分布式锁
boolean lockAcquired = KPRedisUtil.lock("lockKey", 3600);
// 获取分布式锁(简化版)
boolean lockAcquired2 = KPRedisUtil.lock("lockKey", 3600);
参数说明:
key: 键名releaseTime: 锁的过期时间value: 锁的值delta: 增加的数值pattern: 键名匹配模式timeout: 过期时间timeUnit: 时间单位
返回值:
- 根据具体方法而定
核心方法列表
| 方法名 | 参数 | 返回值 | 说明 |
|---|---|---|---|
| set | String key, Object value | void | 设置键值对(永久保存,已废弃) |
| set | String key, Object value, long timeout | void | 设置键值对并指定过期时间(秒) |
| set | String key, Object value, long timeout, TimeUnit timeUnit | void | 设置键值对并指定过期时间和单位 |
| get | String key | Object | 获取键对应的值 |
| getString | String key | String | 获取键对应的字符串值 |
| getInteger | String key | Integer | 获取键对应的整数值 |
| setList | String key, long index, Object value | void | 在指定位置设置List元素 |
| setListByLeftPush | String key, Object obj | void | 从左侧推入元素到List |
| setListByLeftPushAll | String key, List<T> list | void | 批量从左侧推入元素到List |
| setListByRightPush | String key, Object obj | void | 从右侧推入元素到List |
| setListByRightPushAll | String key, List<T> list | void | 批量从右侧推入元素到List |
| getList | String key | List | 获取List所有元素 |
| getList | String key, long start, long end | List | 获取List指定范围元素 |
| getListSize | String key | long | 获取List大小 |
| removeList | String key, Object value | Long | 删除List中指定值的元素 |
| setSet | String key, Object... values | void | 添加元素到Set |
| getSetSize | String key | long | 获取Set大小 |
| setSet | String key | Set | 获取Set所有元素 |
| removeSet | String key, Object... values | long | 删除Set中指定元素 |
| setZSet | String key, Object value, double score | void | 添加元素到有序集合 |
| setZSet | String key, Set set | void | 批量添加元素到有序集合 |
| getZSet | String key, long start, long end | Set | 获取有序集合指定范围元素 |
| getZSet | String key | Set | 获取有序集合所有元素 |
| getZSetSize | String key | long | 获取有序集合大小 |
| setHash | String key, Object hashKey, Object value | void | 设置Hash中的字段值 |
| getHashSize | String key | void | 获取Hash中字段的大小 |
| getHash | String key, Object hashKey | Object | 获取Hash中指定字段的值 |
| getHash | String key | Map<String, Object> | 获取Hash中所有字段和值 |
| removeHash | Object key, Object... hashKeys | Long | 删除Hash中指定字段 |
| hasKey | String key | boolean | 判断键是否存在 |
| ttl | String key | long | 获取键的过期时间(秒) |
| expire | String key, long timeout | Boolean | 设置键的过期时间(秒) |
| expire | String key, long timeout, TimeUnit timeUnit | Boolean | 设置键的过期时间(指定单位) |
| incr | String key, long delta | long | 增加键的值 |
| keys | String pattern | Set<String> | 查找匹配模式的键 |
| remove | String key | void | 删除键 |
| removeBacth | String key | void | 批量删除键 |
| getSize | Object key | long | 获取键对应值的大小 |
| lock | String key, int value, long releaseTime | boolean | 获取分布式锁 |
| lock | String key, long releaseTime | boolean | 获取分布式锁(简化版) |
反射工具类-KPReflectUtil
Java反射操作工具类,提供字段获取、方法调用、属性设置等常用反射操作的便捷方法。该工具类简化了Java反射API的使用,提供了更简洁的接口来操作对象的字段和方法。
获取字段值
通过反射获取对象指定字段的值。
// 获取对象指定字段的值
User user = new User();
user.setName("张三");
Object nameValue = KPReflectUtil.getField(user, "name");
参数说明:
obj: 要操作的对象fieldName: 字段名称
返回值: 字段的值,如果获取失败返回null
获取所有声明的字段
获取类的所有声明字段,包括父类的字段。
// 获取类的所有字段(包括父类)
List<Field> allFields = KPReflectUtil.getAllDeclaredFields(User.class);
// 获取类的所有字段,排除指定字段
List<String> excludeFields = Arrays.asList("id", "createTime");
List<Field> fieldsWithoutExcluded = KPReflectUtil.getAllDeclaredFields(User.class, excludeFields);
// 获取类的指定字段
List<String> includeFields = Arrays.asList("name", "age");
List<Field> specificFields = KPReflectUtil.getAllDeclaredFields(User.class, new ArrayList<>(), includeFields);
参数说明:
clazz: 要获取字段的类excludeFieldLists: 要排除的字段列表globalList: 要包含的字段列表
返回值: Field对象列表
判断对象是否为空
判断对象及其所有属性是否为空。
// 判断对象是否为空
User user = new User();
boolean isEmpty = KPReflectUtil.isObjectEmpty(user, new ArrayList<>(), false);
// 判断对象是否为空,排除指定字段
List<String> excludeFields = Arrays.asList("id", "createTime");
boolean isEmptyWithExclude = KPReflectUtil.isObjectEmpty(user, excludeFields, false);
参数说明:
obj: 要检查的对象excludeFieldLists: 排除检查的字段集合checkSuperClassFields: 是否检查父类的字段
返回值: 如果所有属性都为空或为null,则返回true,否则返回false
获取Getter方法
获取对象的所有Getter方法。
// 获取对象的所有getter方法
User user = new User();
List<Method> getterMethods = KPReflectUtil.getGetterMethods(user);
参数说明:
obj: 要获取getter方法的对象
返回值: getter方法列表
调用方法
通过反射调用对象的方法。
// 调用对象的指定方法
User user = new User();
Object result = KPReflectUtil.getMethod(user, "getName");
// 通过包名、类名和方法名调用静态方法
Object result2 = KPReflectUtil.getMethod("com.example", "UserUtil", "staticMethod");
参数说明:
obj: 要调用方法的对象methodName: 方法名packageName: 包名className: 类名
返回值: 方法调用的返回值
设置属性值
通过反射给对象的属性赋值。
// 通过字段名直接设置属性值
User user = new User();
KPReflectUtil.setPropetry(user, "name", "张三");
// 通过setter方法设置属性值(不同数据类型重载方法)
KPReflectUtil.setPropetryMethod(user, "setName", "张三");
KPReflectUtil.setPropetryMethod(user, "setAge", 25);
KPReflectUtil.setPropetryMethod(user, "setBirthday", new Date());
KPReflectUtil.setPropetryMethod(user, "setActive", true);
参数说明:
obj: 要设置属性的对象propetryName: 属性名或方法名value: 要设置的值
获取Setter方法
获取对象的所有Setter方法。
// 获取对象的所有setter方法
User user = new User();
List<Method> setterMethods = KPReflectUtil.getSetterMethods(user);
参数说明:
obj: 要获取setter方法的对象
返回值: setter方法列表
核心方法列表
| 方法名 | 参数 | 返回值 | 说明 |
|---|---|---|---|
| getField | Object obj, String fieldName | Object | 通过反射获取指定字段 |
| getAllDeclaredFields | Class<?> clazz | List<Field> | 获取所有Field包括父类 |
| getAllDeclaredFields | Class<?> clazz, List<String> excludeFieldLists | List<Field> | 获取所有Field包括父类(排除指定字段) |
| getAllDeclaredFields | Class<?> clazz, List<String> excludeFieldLists, List<String> globalList | List<Field> | 获取所有Field包括父类(指定包含字段) |
| isObjectEmpty | Object obj, List<String> excludeFieldLists, Boolean checkSuperClassFields | boolean | 判断对象及其所有属性是否为空 |
| getGetterMethods | Object obj | List<Method> | 获取对象的getter方法 |
| getMethod | Object obj, String methodName | Object | 调用对象的指定方法 |
| getMethod | String packageName, String className, String methodName | Object | 通过包名、类名和方法名调用静态方法 |
| setPropetry | Object obj, String propetryName, Object value | void | 通过反射给变量赋值 |
| setPropetryMethod | Object obj, String propetryName, String value | void | 通过反射给参数赋值(String类型) |
| setPropetryMethod | Object obj, String propetryName, Integer value | void | 通过反射给参数赋值(Integer类型) |
| setPropetryMethod | Object obj, String propetryName, Date value | void | 通过反射给参数赋值(Date类型) |
| setPropetryMethod | Object obj, String propetryName, boolean value | void | 通过反射给参数赋值(boolean类型) |
| getSetterMethods | Object obj | List<Method> | 获取对象的setter方法 |
请求工具类-KPRequsetUtil
HTTP请求处理工具类,提供获取请求参数、请求对象以及处理请求上下文等功能。简化在Spring Web环境中对HTTP请求的操作。
获取JSON请求参数
从HTTP请求中获取application/json类型的参数,并将其转换为JSONObject对象。
JSONObject jsonParam = KPRequsetUtil.getJSONParam(request);
参数说明:
request: HttpServletRequest对象
返回值: 包含请求参数的JSONObject对象
获取请求参数Map
将HttpServletRequest中的参数Map转换为JSONObject对象。
JSONObject params = KPRequsetUtil.getParam(request);
参数说明:
request: HttpServletRequest对象
返回值: 包含请求参数的JSONObject对象
获取当前请求对象
获取当前线程上下文中的HttpServletRequest对象。
HttpServletRequest request = KPRequsetUtil.getRequest();
返回值: 当前的HttpServletRequest对象,如果获取失败则返回null
设置请求上下文
在多线程环境中传递请求上下文信息。
KPRequsetUtil.setRequest();
清理请求上下文
清理当前线程的请求上下文信息。
KPRequsetUtil.clearRequest();
获取请求处理器方法
从HttpServletRequest中获取对应的HandlerMethod对象。
HandlerMethod handlerMethod = KPRequsetUtil.queryHandlerMethod(request);
参数说明:
req: HttpServletRequest对象
返回值: 对应的HandlerMethod对象,如果获取失败则返回null
解析URL查询参数
从URL字符串中解析查询参数。
Map<String, String> queryParams = KPRequsetUtil.getQueryParams(url);
参数说明:
url: 包含查询参数的URL字符串
返回值: 包含查询参数的Map对象,如果解析失败则返回null
核心方法列表
| 方法名 | 参数 | 返回值 | 说明 |
|---|---|---|---|
| getJSONParam | HttpServletRequest request | JSONObject | 获取JSON请求参数 |
| getParam | HttpServletRequest request | JSONObject | 获取请求参数Map |
| getRequest | 无 | HttpServletRequest | 获取当前请求对象 |
| setRequest | 无 | void | 设置请求上下文 |
| clearRequest | 无 | void | 清理请求上下文 |
| queryHandlerMethod | HttpServletRequest req | HandlerMethod | 获取请求处理器方法 |
| getQueryParams | String url | Map<String, String> | 解析URL查询参数 |
响应工具类-KPResponseUtil
HTTP响应工具类,提供向客户端返回JSON格式数据的便捷方法。该工具类基于Spring Web框架实现,简化了在Web应用中处理HTTP响应的常见场景。
写入JSON响应
向HttpServletResponse中写入JSON格式的响应数据。
// 在Controller中使用,向response写入JSON数据
@RestController
public class UserController {
@PostMapping("/user")
public void createUser(HttpServletResponse response) {
JSONObject result = new JSONObject();
result.put("code", 200);
result.put("message", "success");
result.put("data", new JSONObject());
// 写入JSON响应
KPResponseUtil.writeJson(response, result);
}
}
// 也可以直接传入普通对象
@RestController
public class ProductController {
@GetMapping("/product")
public void getProduct(HttpServletResponse response) {
Product product = new Product("手机", 999.0);
KPResponseUtil.writeJson(response, product);
}
}
参数说明:
response: HttpServletResponse对象jsonData: 要写入的JSON数据,可以是JSONObject或其他对象
写入JSON响应(使用当前响应对象)
使用当前线程绑定的HttpServletResponse对象写入JSON格式的响应数据。
// 在Controller中使用,自动获取当前response对象
@GetMapping("/user/info")
public void getUserInfo() {
JSONObject result = new JSONObject();
result.put("username", "张三");
result.put("age", 25);
// 自动使用当前请求的response对象
KPResponseUtil.writeJson(result);
}
参数说明:
jsonData: 要写入的JSON数据,通常为JSONObject
获取当前响应对象
获取当前线程绑定的HttpServletResponse对象。
// 在需要直接操作response的场景中使用
HttpServletResponse response = KPResponseUtil.getResponse();
response.setHeader("Custom-Header", "CustomValue");
response.setStatus(201);
返回值: 当前线程绑定的HttpServletResponse对象
核心方法列表
| 方法名 | 参数 | 返回值 | 说明 |
|---|---|---|---|
| writeJson | HttpServletResponse response, Object jsonData | void | 向指定的HttpServletResponse写入JSON数据 |
| writeJson | JSONObject jsonData | void | 向当前线程绑定的HttpServletResponse写入JSON数据 |
| getResponse | 无 | HttpServletResponse | 获取当前线程绑定的HttpServletResponse对象 |
Spring容器工具类-KPServiceUtil
Spring容器工具类,用于管理和获取Spring容器中的Bean实例。该工具类实现了ApplicationContextAware接口,能够在Spring容器启动时自动获取ApplicationContext,并提供多种方式获取Bean实例。
获取ApplicationContext
获取Spring的ApplicationContext对象。
// 获取ApplicationContext
ApplicationContext context = KPServiceUtil.getApplicationContext();
返回值: Spring的ApplicationContext对象
根据名称获取Bean
通过Bean名称从Spring容器中获取Bean实例。
// 通过名称获取Bean
UserService userService = KPServiceUtil.getBean("userService");
参数说明:
name: Bean的名称
返回值: 指定名称的Bean实例
异常说明: 如果未找到对应的Bean,会抛出KPServiceException
根据类型获取Bean
通过Bean类型从Spring容器中获取Bean实例。
// 通过类型获取Bean
UserService userService = KPServiceUtil.getBean(UserService.class);
参数说明:
clazz: Bean的Class类型
返回值: 指定类型的Bean实例
根据名称和类型获取Bean
通过Bean名称和类型从Spring容器中获取Bean实例。
// 通过名称和类型获取Bean
UserService userService = KPServiceUtil.getBean("userService", UserService.class);
参数说明:
name: Bean的名称clazz: Bean的Class类型
返回值: 指定名称和类型的Bean实例
核心方法列表
| 方法名 | 参数 | 返回值 | 说明 |
|---|---|---|---|
| getApplicationContext | 无 | ApplicationContext | 获取Spring的ApplicationContext对象 |
| getBean | String name | T | 通过名称获取Bean实例 |
| getBean | Class<T> clazz | T | 通过类型获取Bean实例 |
| getBean | String name, Class<T> clazz | T | 通过名称和类型获取Bean实例 |
字符串工具类-KPStringUtil
字符串操作工具类,提供字符串判断、格式化、转换等常用操作。该工具类包含判断字符串是否为空、字符串格式化、汉字转拼音等多种实用方法。
判断字符串是否在数组中
判断字符串是否在字符串数组中。
// 判断字符串是否在数组中
String[] arr = {"apple", "banana", "orange"};
boolean result = KPStringUtil.isContain("apple", arr);
参数说明:
str: 要查找的字符串arr: 字符串数组
返回值: 如果字符串在数组中存在返回true,否则返回false
字符串首字母大写
将字符串的首字母转换为大写。
// 首字母大写
String result = KPStringUtil.initialsUpperCase("hello world");
// 返回 "Hello world"
参数说明:
str: 需要操作的字符串
返回值: 首字母大写的字符串
字符串首字母小写
将字符串的首字母转换为小写。
// 首字母小写
String result = KPStringUtil.initialsLowerCase("Hello World");
// 返回 "hello World"
参数说明:
str: 需要操作的字符串
返回值: 首字母小写的字符串
判断对象是否为空
判断字符串、列表、对象等是否为空。
// 判断字符串是否为空
boolean isEmpty = KPStringUtil.isEmpty("test");
// 判断列表是否为空
List<String> list = new ArrayList<>();
boolean isListEmpty = KPStringUtil.isEmpty(list);
// 判断对象是否为空
Object obj = null;
boolean isObjectEmpty = KPStringUtil.isEmpty(obj);
// 判断Integer是否为空
Integer value = null;
boolean isIntegerEmpty = KPStringUtil.isEmpty(value);
参数说明:
str: 字符串对象obj: 任意对象list: 列表对象value: Integer/Double/Long/LocalDate对象
返回值: 如果对象为空返回true,否则返回false
判断对象是否不为空
判断字符串、列表、对象等是否不为空。
// 判断字符串是否不为空
boolean isNotEmpty = KPStringUtil.isNotEmpty("test");
// 判断列表是否不为空
List<String> list = Arrays.asList("item1", "item2");
boolean isListNotEmpty = KPStringUtil.isNotEmpty(list);
参数说明:
str: 字符串对象obj: 任意对象list: 列表对象value: Integer/LocalDate对象
返回值: 如果对象不为空返回true,否则返回false
获取当前类和方法名
获取当前执行的类名和方法名。
// 获取当前类和方法名
String classAndMethod = KPStringUtil.getClassAndMethodName();
返回值: 当前类名和方法名组成的字符串,格式为"类名.方法名"
字符串格式化
使用占位符格式化字符串。
// 使用占位符格式化字符串
String result = KPStringUtil.format("Hello {0}, you are {1} years old", "张三", 25);
// 返回 "Hello 张三, you are 25 years old"
// 使用多个占位符
String result2 = KPStringUtil.format("Name: {0}, Age: {1}, City: {2}", "李四", 30, "北京");
参数说明:
format: 包含占位符的格式字符串,占位符为{0}、{1}等args: 要替换占位符的参数
返回值: 格式化后的字符串
为空格式化
当字符串为空时返回默认值。
// 为空时返回默认值
String result = KPStringUtil.emptyFormat(null, "默认值");
// 返回 "默认值"
String result2 = KPStringUtil.emptyFormat("有值", "默认值");
// 返回 "有值"
// 为空时返回默认值并添加分隔符
String result3 = KPStringUtil.emptyFormat(null, "默认值", ",");
// 返回 "默认值"
String result4 = KPStringUtil.emptyFormat("有值", "默认值", ",");
// 返回 "有值,"
参数说明:
oldStr: 原始字符串newStr: 默认字符串split: 分隔符(可选)
返回值: 如果原字符串不为空则返回原字符串,否则返回默认值
对象转字符串
将对象转换为字符串,支持默认值。
// 对象转字符串
String result = KPStringUtil.toString(null);
// 返回 ""
// 对象转字符串,指定默认值
String result2 = KPStringUtil.toString(null, "默认值");
// 返回 "默认值"
// 对象转字符串,指定默认值和连接符
String result3 = KPStringUtil.toString(null, "默认值", "-");
// 返回 "默认值"
String result4 = KPStringUtil.toString("有值", "默认值", "-");
// 返回 "有值-"
参数说明:
txtType: 要转换的对象defaultValue: 默认值(可选)joint: 连接符(可选)
返回值: 转换后的字符串
汉字转换为拼音
将汉字字符串转换为拼音。
// 汉字转换为拼音
String pinyin = KPStringUtil.convertToPinyin("你好世界");
// 返回 "nishijie"
// 汉字转换为拼音首字母
String firstLetters = KPStringUtil.convertToPinyinFirstLetter("你好世界");
// 返回 "nsjs"
参数说明:
chinese: 汉字字符串
返回值: 对应的拼音字符串
异常说明: 如果字符无法转换为拼音,会抛出KPServiceException
核心方法列表
| 方法名 | 参数 | 返回值 | 说明 |
|---|---|---|---|
| isContain | String str, String[] arr | boolean | 判断字符串是否在数组中 |
| initialsUpperCase | String str | String | 字符串首字母大写 |
| initialsLowerCase | String str | String | 字符串首字母小写 |
| isEmpty | String/LocalDate/List Object/Integer/Double Long str | boolean | 判断对象是否为空 |
| isNotEmpty | String/List/Object Integer/LocalDate value | boolean | 判断对象是否不为空 |
| getClassAndMethodName | 无 | String | 获取当前类和方法名 |
| format | String format, Object... args | String | 字符串格式化 |
| emptyFormat | String oldStr, String newStr | String | 为空格式化 |
| emptyFormat | String oldStr, String newStr, String split | String | 为空格式化并添加分隔符 |
| toString | String txtType | String | 对象转字符串 |
| toString | String txtType, String defaultValue | String | 对象转字符串(指定默认值) |
| toString | String txtType, String defaultValue, String joint | String | 对象转字符串(指定默认值和连接符) |
| convertToPinyin | String chinese | String | 汉字转换为拼音 |
| convertToPinyinFirstLetter | String chinese | String | 汉字转换为拼音首字母 |
线程工具类-KPThreadUtil
线程操作工具类,提供线程相关的便捷操作方法。该工具类目前包含线程休眠功能,用于在多线程编程中实现延迟执行。
线程休眠
使当前线程休眠指定的时间(毫秒)。
// 使当前线程休眠1000毫秒(1秒)
KPThreadUtil.sleep(1000);
// 使当前线程休眠500毫秒
KPThreadUtil.sleep(500);
参数说明:
sleepTime: 休眠时间(毫秒)
返回值: void
异常说明: 如果线程在休眠期间被中断,不会抛出异常,而是静默处理InterruptedException
核心方法列表
| 方法名 | 参数 | 返回值 | 说明 |
|---|---|---|---|
| sleep | Integer sleepTime | void | 使当前线程休眠指定时间(毫秒) |
UUID工具类-KPUuidUtil
UUID生成工具类,用于生成标准UUID和去除连接符的UUID,简化唯一标识符的生成操作。
获取标准UUID
生成一个标准格式的UUID字符串(包含连接符)。
String uuid = KPUuidUtil.getUUID();
返回值: 标准格式的UUID字符串,例如:"550e8400-e29b-41d4-a716-446655440000"
获取简洁UUID
生成一个去除连接符的UUID字符串。
String simpleUuid = KPUuidUtil.getSimpleUUID();
返回值: 去除连接符的UUID字符串,例如:"550e8400e29b41d4a716446655440000"
核心方法列表
| 方法名 | 参数 | 返回值 | 说明 |
|---|---|---|---|
| getUUID | 无 | String | 生成标准UUID |
| getSimpleUUID | 无 | String | 生成去除连接符的UUID |
校验工具类-KPVerifyUtil
校验工具类,提供各种数据校验功能,扩展了Assert的功能。包括非空校验、长度校验、正则表达式校验等多种校验方式,简化了参数校验操作。
静态常量
工具类中定义了常用的正则表达式常量:
// IP地址校验正则表达式
String IP_REGEX = "((25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d)))\\.){3}(25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d)))";
// Cron表达式校验正则表达式
String CRON_REGEX = "^\\s*($|#|\\w+\\s*=|(\\?|\\*|(?:[0-5]?\\d)(?:(?:-|\\/|\\,)(?:[0-5]?\\d))?(?:,(?:[0-5]?\\d)(?:(?:-|\\/|\\,)(?:[0-5]?\\d))?)*)\\s+(\\?|\\*|(?:[0-5]?\\d)(?:(?:-|\\/|\\,)(?:[0-5]?\\d))?(?:,(?:[0-5]?\\d)(?:(?:-|\\/|\\,)(?:[0-5]?\\d))?)*)\\s+(\\?|\\*|(?:[01]?\\d|2[0-3])(?:(?:-|\\/|\\,)(?:[01]?\\d|2[0-3]))?(?:,(?:[01]?\\d|2[0-3])(?:(?:-|\\/|\\,)(?:[01]?\\d|2[0-3]))?)*)\\s+(\\?|\\*|(?:0?[1-9]|[12]\\d|3[01])(?:(?:-|\\/|\\,)(?:0?[1-9]|[12]\\d|3[01]))?(?:,(?:0?[1-9]|[12]\\d|3[01])(?:(?:-|\\/|\\,)(?:0?[1-9]|[12]\\d|3[01]))?)*)\\s+(\\?|\\*|(?:[1-9]|1[012])(?:(?:-|\\/|\\,)(?:[1-9]|1[012]))?(?:L|W)?(?:,(?:[1-9]|1[012])(?:(?:-|\\/|\\,)(?:[1-9]|1[012]))?(?:L|W)?)*|\\?|\\*|(?:JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)(?:(?:-)(?:JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC))?(?:,(?:JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)(?:(?:-)(?:JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC))?)*)\\s+(\\?|\\*|(?:[0-6])(?:(?:-|\\/|\\,|#)(?:[0-6]))?(?:L)?(?:,(?:[0-6])(?:(?:-|\\/|\\,|#)(?:[0-6]))?(?:L)?)*|\\?|\\*|(?:MON|TUE|WED|THU|FRI|SAT|SUN)(?:(?:-)(?:MON|TUE|WED|THU|FRI|SAT|SUN))?(?:,(?:MON|TUE|WED|THU|FRI|SAT|SUN)(?:(?:-)(?:MON|TUE|WED|THU|FRI|SAT|SUN))?)*)(|\\s)+(\\?|\\*|(?:|\\d{4})(?:(?:-|\\/|\\,)(?:|\\d{4}))?(?:,(?:|\\d{4})(?:(?:-|\\/|\\,)(?:|\\d{4}))?)*))$";
// 手机号校验正则表达式
String PHONE_REGEX = "^[1][0-9]{10}$";
// 邮箱校验正则表达式
String EMAIL_REGEX = "^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$";
// 身份证校验正则表达式
String IDENTITY_CARD = "^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}([\\d|x|X]{1})$";
// 中文校验正则表达式
String CHINESE = ".*[\\u4e00-\\u9fa5]+.*";
非空校验
校验对象是否为空,支持多种数据类型。
// 校验对象是否为空
KPVerifyUtil.notNull(object, "对象不能为空");
// 校验字符串是否为空
KPVerifyUtil.notNull(string, "字符串不能为空");
// 校验整数是否为空
KPVerifyUtil.notNull(integer, "整数不能为空");
// 校验长整型是否为空
KPVerifyUtil.notNull(long, "长整型不能为空");
// 校验双精度浮点数是否为空
KPVerifyUtil.notNull(double, "双精度浮点数不能为空");
// 校验日期是否为空
KPVerifyUtil.notNull(date, "日期不能为空");
// 校验BigDecimal是否为空
KPVerifyUtil.notNull(bigDecimal, "BigDecimal不能为空");
// 校验列表是否为空
KPVerifyUtil.notNull(list, "列表不能为空");
// 校验文件是否为空
KPVerifyUtil.notNull(multipartFile);
参数说明:
- 第一个参数:要校验的对象
- 第二个参数(部分重载方法):错误信息
长度校验
校验字符串、数字等的长度是否在指定范围内。
// 校验字符串长度
KPVerifyUtil.length("test", 2, 10, "字符串长度必须在2-10之间");
// 校验整数范围
KPVerifyUtil.length(5, 1, 10, "数值必须在1-10之间");
// 校验BigDecimal范围
KPVerifyUtil.length(bigDecimal, 1, 100, "数值必须在1-100之间");
// 校验双精度浮点数范围
KPVerifyUtil.length(3.14, 1.0, 5.0, "数值必须在1.0-5.0之间");
// 校验长整型范围
KPVerifyUtil.length(longValue, 1L, 100L, "数值必须在1-100之间");
参数说明:
str/num:要校验的值min:最小值max:最大值errMeg:错误信息
最小长度校验
校验值是否不小于指定的最小值。
// 校验字符串最小长度
KPVerifyUtil.minLength("test", 2, "字符串长度不能少于2位");
// 校验整数最小值
KPVerifyUtil.minLength(5, 1, "数值不能小于1");
// 校验双精度浮点数最小值
KPVerifyUtil.minLength(3.14, 1.0, "数值不能小于1.0");
// 校验长整型最小值
KPVerifyUtil.minLength(100L, 50L, "数值不能小于50");
参数说明:
str/num:要校验的值min:最小值errMeg:错误信息
最大长度校验
校验值是否不超过指定的最大值。
// 校验字符串最大长度
KPVerifyUtil.maxLength("test", 10, "字符串长度不能超过10位");
// 校验整数最大值
KPVerifyUtil.maxLength(5, 10, "数值不能大于10");
// 校验长整型最大值
KPVerifyUtil.maxLength(100L, 200L, "数值不能大于200");
// 校验双精度浮点数最大值
KPVerifyUtil.maxLength(3.14, 5.0, "数值不能大于5.0");
参数说明:
str/num:要校验的值max:最大值errMeg:错误信息
有条件长度校验
当值不为空时校验长度是否在指定范围内。
// 校验字符串长度(有条件)
KPVerifyUtil.lengthIsNot("test", 2, 10, "字符串长度必须在2-10之间");
// 校验整数范围(有条件)
KPVerifyUtil.lengthIsNot(5, 1, 10, "数值必须在1-10之间");
// 校验BigDecimal范围(有条件)
KPVerifyUtil.lengthIsNot(bigDecimal, 1, 100, "数值必须在1-100之间");
// 校验双精度浮点数范围(有条件)
KPVerifyUtil.lengthIsNot(3.14, 1.0, 5.0, "数值必须在1.0-5.0之间");
// 校验长整型范围(有条件)
KPVerifyUtil.lengthIsNot(longValue, 1L, 100L, "数值必须在1-100之间");
参数说明:
str/num:要校验的值min:最小值max:最大值errMeg:错误信息
二选一校验
校验两个字段中必须有一个有值或只能有一个有值。
// 二选一校验
KPVerifyUtil.twoChoiceOne(field1, "字段1", field2, "字段2", false);
// 二选一校验(列表)
KPVerifyUtil.twoChoiceOne(field1, "字段1", list, "列表字段", true);
// 二选一校验(列表对列表)
KPVerifyUtil.twoChoiceOne(list1, "列表1", list2, "列表2", false);
参数说明:
fileId1:第一个字段fileId1Name:第一个字段名称fileId2:第二个字段fileId2Name:第二个字段名称isEmpty:是否允许都为空(true:允许都为空,false:至少有一个不为空)
多选一校验
校验多个参数中至少有一个不为空。
// 多选一校验
KPVerifyUtil.notNullByMultipleChoice("至少提供一个参数", param1, param2, param3);
参数说明:
errMeg:错误信息str:可变参数列表
正则表达式校验
根据正则表达式校验字符串是否匹配或不匹配。
// 校验满足规则(匹配)
KPVerifyUtil.matchesRule("test@example.com", KPVerifyUtil.EMAIL_REGEX, "邮箱格式不正确");
// 校验不满足规则(不匹配)
KPVerifyUtil.matchesRuleMistake("invalid-email", KPVerifyUtil.EMAIL_REGEX, "邮箱格式应不正确");
参数说明:
str:要校验的字符串Regex:正则表达式errMeg:错误信息
字符串出现频率校验
校验指定字符串在源字符串中的出现次数是否在指定范围内。
// 校验字符串出现频率
KPVerifyUtil.frequency("hello world", "l", 2, 5, "字符'l'出现次数必须在2-5次之间");
参数说明:
source:源字符串target:目标字符串min:最小出现次数max:最大出现次数errMeg:错误信息
指定字符串后长度校验
校验指定字符串后的子字符串长度是否不超过最大值。
// 校验指定字符串后长度
KPVerifyUtil.lengthByString("prefix_content", "_", 50, "后缀内容长度不能超过50");
参数说明:
source:源字符串str:指定字符串maxNum:最大长度errMeg:错误信息
邮箱校验
专门用于校验邮箱格式。
// 校验邮箱
KPVerifyUtil.email("test@example.com", "邮箱格式不正确", false);
// 校验邮箱(允许为空)
KPVerifyUtil.email("", "邮箱格式不正确", true);
参数说明:
email:邮箱地址errMeg:错误信息IsNull:是否允许为空(true:允许为空,false:不允许为空)
核心方法列表
| 方法名 | 参数 | 返回值 | 说明 |
|---|---|---|---|
| notNull | Object str, String errMeg | void | 校验对象非空 |
| notNull | String str, String errMeg | void | 校验字符串非空 |
| notNull | Integer num, String errMeg | void | 校验整数非空 |
| notNull | Long num, String errMeg | void | 校验长整型非空 |
| notNull | Double num, String errMeg | void | 校验双精度浮点数非空 |
| notNull | Date date, String errMeg | void | 校验日期非空 |
| notNull | BigDecimal str, String errMeg | void | 校验BigDecimal非空 |
| notNull | List<?> list, String errMeg | void | 校验列表非空 |
| notNull | MultipartFile file | void | 校验文件非空 |
| length | String str, Integer min, Integer max, String errMeg | void | 校验字符串长度范围 |
| length | Integer num, Integer min, Integer max, String errMeg | void | 校验整数范围 |
| length | BigDecimal str, Integer min, Integer max, String errMeg | void | 校验BigDecimal范围 |
| length | Double str, Integer min, Integer max, String errMeg | void | 校验双精度浮点数范围 |
| length | Long str, Integer min, Integer max, String errMeg | void | 校验长整型范围 |
| minLength | String str, Integer min, String errMeg | void | 校验字符串最小长度 |
| minLength | Integer num, Integer min, String errMeg | void | 校验整数最小值 |
| minLength | Double num, Integer min, String errMeg | void | 校验双精度浮点数最小值 |
| minLength | Long num, Integer min, String errMeg | void | 校验长整型最小值 |
| maxLength | String str, Integer max, String errMeg | void | 校验字符串最大长度 |
| maxLength | Integer str, Integer max, String errMeg | void | 校验整数最大值 |
| maxLength | Long str, Integer max, String errMeg | void | 校验长整型最大值 |
| maxLength | Double str, Integer max, String errMeg | void | 校验双精度浮点数最大值 |
| lengthIsNot | String str, Integer min, Integer max, String errMeg | void | 有条件校验字符串长度范围 |
| lengthIsNot | Integer num, Integer min, Integer max, String errMeg | void | 有条件校验整数范围 |
| lengthIsNot | BigDecimal str, Integer min, Integer max, String errMeg | void | 有条件校验BigDecimal范围 |
| lengthIsNot | Double str, Integer min, Integer max, String errMeg | void | 有条件校验双精度浮点数范围 |
| lengthIsNot | Long str, Integer min, Integer max, String errMeg | void | 有条件校验长整型范围 |
| twoChoiceOne | Object fileId1, String fileId1Name, List<String> fileId2, String fileId2Name, boolean isEmpty | void | 二选一校验 |
| twoChoiceOne | Object fileId1, String fileId1Name, Object fileId2, String fileId2Name, boolean isEmpty | void | 二选一校验 |
| twoChoiceOne | List<Object> fileId1, String fileId1Name, List<Object> fileId2, String fileId2Name, boolean isEmpty | void | 二选一校验 |
| notNullByMultipleChoice | String errMeg, String... str | void | 多选一校验 |
| matchesRuleMistake | String str, String Regex, String errMeg | void | 校验不满足正则表达式 |
| matchesRule | String str, String Regex, String errMeg | void | 校验满足正则表达式 |
| frequency | String source, String target, Integer min, Integer max, String errMeg | void | 校验字符串出现频率 |
| lengthByString | String source, String str, Integer maxNum, String errMeg | void | 校验指定字符串后长度 |
| String email, String errMeg, Boolean IsNull | void | 校验邮箱格式 |
WebService XML处理工具类-KPWebServiceXmlUtil
WebService XML处理工具类,用于将特定格式的XML数据转换为JSON对象或数组。主要处理SOAP格式的XML响应数据,将其转换为更易处理的JSON格式。
XML转JSON数组
将符合特定格式的XML字符串转换为JSONArray对象。
JSONArray jsonArray = KPWebServiceXmlUtil.toJsonXml(xmlString, "GetUserInfo");
参数说明:
xml: 要转换的XML字符串interfaceNmae: 接口名称,用于定位XML中的特定节点
返回值: 解析后的JSONArray对象,如果解析失败则返回null
异常说明: 如果XML中返回节点存在多个,将抛出KPServiceException异常
XML转JSON对象
将XML字符串转换为JSONObject对象,适用于某些接口返回的XML格式不一致的情况。
JSONObject jsonObject = KPWebServiceXmlUtil.jsonToXml(xmlString, "GetUserInfo");
参数说明:
xml: 要转换的XML字符串interfaceNmae: 接口名称,用于定位XML中的特定节点
返回值: 解析后的JSONObject对象
处理JSON对象格式
处理数据中间层只有一条数据时格式不正确的问题,规范化JSONObject结构。
JSONObject processedJson = KPWebServiceXmlUtil.toJsonObject(jsonObject);
参数说明:
json: 需要处理的JSONObject
返回值: 处理后的JSONObject对象
核心方法列表
| 方法名 | 参数 | 返回值 | 说明 |
|---|---|---|---|
| toJsonXml | String xml, String interfaceNmae | JSONArray | 将XML转换为JSONArray |
| jsonToXml | String xml, String interfaceNmae | JSONObject | 将XML转换为JSONObject |
| toJsonObject | JSONObject json | JSONObject | 处理JSON对象格式 |
XML处理工具类-KPXmlUtil
XML处理工具类,提供XML与JSON之间的相互转换功能。使用Staxon库实现XML和JSON的高效转换,支持格式化输出和命名空间处理。
XML转JSON
将XML字符串转换为JSON格式字符串。
String json = KPXmlUtil.xml2json(xmlString);
参数说明:
xml: 要转换的XML字符串
返回值: 转换后的JSON字符串
处理细节:
- 自动将空字符串
""替换为"null" - 移除
xml:space="preserve"属性 - 将
@符号替换为#符号 - 支持命名空间处理和自动数组识别
JSON转XML
将JSON字符串转换为XML格式字符串。
String xml = KPXmlUtil.json2xml(jsonString);
参数说明:
json: 要转换的JSON字符串
返回值: 转换后的XML字符串
处理细节:
- 自动移除XML声明头
<?xml version="1.0" encoding="UTF-8"?> - 支持格式化输出
- 支持命名空间处理
核心方法列表
| 方法名 | 参数 | 返回值 | 说明 |
|---|---|---|---|
| xml2json | String xml | String | 将XML转换为JSON |
| json2xml | String json | String | 将JSON转换为XML |
压缩工具类-KPZipUtil
压缩工具类,提供ZIP和RAR文件的压缩与解压功能。支持将文件流压缩为ZIP文件,以及将ZIP/RAR文件解压到指定目录或内存中。
解压文件流
根据文件类型自动选择解压方式,支持ZIP和RAR格式。
List<ZipFilePO> fileList = KPZipUtil.unInputStream(inputStream, "example.zip");
参数说明:
inputStream: 要解压的文件流filePath: 文件路径,用于判断文件类型
返回值: 解压后的文件列表ZipFilePO
异常说明: 如果文件格式不支持,将抛出KPServiceException异常
压缩文件流并下载
将多个文件流压缩为ZIP文件并通过HTTP响应下载。
KPZipUtil.decompressionByZip(fileList, "compressed_files.zip");
参数说明:
zipFilePOList: 要压缩的文件流列表fileName: 压缩后的文件名
本地文件转输入流
将本地文件路径转换为输入流。
InputStream inputStream = KPZipUtil.pathByInputStream("C://example.txt");
参数说明:
localPath: 本地文件路径
返回值: 文件对应的输入流
异常说明: 如果文件不存在或无法读取,将抛出KPServiceException异常
解压ZIP文件到指定目录
将ZIP文件解压到指定的目录中。
KPZipUtil.unZipFile(inputStream, "C://extracted//");
参数说明:
inputStream: ZIP文件输入流path: 解压目标目录路径
异常说明: 解压失败时将抛出KPServiceException异常
解压ZIP文件到内存
将ZIP文件解压到内存中,返回文件列表。
List<ZipFilePO> fileList = KPZipUtil.unZipInputStream(inputStream);
参数说明:
inputStream: ZIP文件输入流
返回值: 解压后的文件列表ZipFilePO
异常说明: 解压失败时将抛出KPServiceException异常
解压RAR文件到指定目录
将RAR文件解压到指定的目录中。
KPZipUtil.unRarFile(inputStream, "C://extracted//");
参数说明:
inputStream: RAR文件输入流path: 解压目标目录路径
异常说明:
- 解压失败时将抛出KPServiceException异常
- 如果使用RAR5算法压缩,将抛出异常提示使用RAR4格式
解压RAR文件到内存
将RAR文件解压到内存中,返回文件列表。
List<ZipFilePO> fileList = KPZipUtil.unRarInputStream(inputStream);
参数说明:
inputStream: RAR文件输入流
返回值: 解压后的文件列表ZipFilePO
异常说明:
- 解压失败时将抛出KPServiceException异常
- 如果使用RAR5算法压缩,将抛出异常提示使用RAR4格式
核心方法列表
| 方法名 | 参数 | 返回值 | 说明 |
|---|---|---|---|
| unInputStream | InputStream inputStream, String filePath | List<ZipFilePO> | 解压文件流 |
| decompressionByZip | List<ZipFilePO> zipFilePOList, String fileName | void | 压缩文件流并下载 |
| pathByInputStream | String localPath | InputStream | 本地文件转输入流 |
| unZipFile | InputStream inputStream, String path | void | 解压ZIP文件到指定目录 |
| unZipInputStream | InputStream inputStream | List<ZipFilePO> | 解压ZIP文件到内存 |
| unRarFile | InputStream inputStream, String path | void | 解压RAR文件到指定目录 |
| unRarInputStream | InputStream inputStream | List<ZipFilePO> | 解压RAR文件到内存 |