易鹏工具类

授权工具-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: 盐的长度,将从字符串首尾各移除此长度的字符

核心方法列表

方法名参数返回值说明
encodeString plainTextString标准Base64编码
encodeUrlSafeString plainTextStringURL安全的Base64编码
decodeString base64StringString标准Base64解码
decodeUrlSafeString urlSafeBase64StringStringURL安全的Base64解码
addSaltString input, int saltLengthString添加盐值
removeSaltString saltedInput, int saltLengthString移除盐值

条形码工具类-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

核心属性

该类采用建造者模式设计,支持链式调用配置条形码参数,核心属性如下:

属性名类型默认值说明
vaNumberString-条形码编码内容(必填,通过构造器传入)
wordsString-条形码下方显示文字(可选,通过构造器传入,为空时不显示文字)
widthInteger300条形码宽度
heightInteger50条形码高度(不含文字区域)
wordheightInteger75含文字区域的条形码总高度
backColorColorColor.WHITE背景颜色
textColorColorColor.BLACK文字颜色
imageTypeStringImgUtil.IMAGE_TYPE_PNG条形码图片格式(如 png、jpg)
fontString"微软雅黑"文字字体

返回值: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

核心属性

该类采用建造者模式设计,支持链式调用配置二维码参数。

配置方法列表

属性名类型默认值说明
imageTypeStringImgUtil.IMAGE_TYPE_PNG二维码图片格式(如 png、jpg)
widthInteger300二维码宽度(像素)
heightInteger300二维码高度(像素)
marginInteger1设置二维码与图片边缘之间的边距(像素)
foreColorColornull (Hutool 默认黑色)设置二维码数据点的颜色
backColorColorColor.WHITE背景颜色
logoUrlStringnull设置中心 Logo 的网络图片 URL
logoLocalhostPathStringnull设置中心 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 表示第一个数大于第二个数

核心方法列表

基本运算方法

方法名参数返回值说明
addBigDecimal/Object valueKPBigDecimalUtils加法运算
subBigDecimal/Object valueKPBigDecimalUtils减法运算
multiplyBigDecimal/Object valueKPBigDecimalUtils乘法运算
divideBigDecimal/Object value, int scaleKPBigDecimalUtils除法运算
balanceBigDecimal/Object valueKPBigDecimalUtils取余运算

结果构建方法

方法名参数返回值说明
buildBigDecimal获取计算结果
buildint scale, RoundingMode roundingModeBigDecimal获取指定精度和取整模式的结果
buildStringString获取字符串结果
buildStringString symbolString获取带符号的字符串结果
buildStringint scale, RoundingMode roundingModeString获取指定精度的字符串结果
buildStringint scale, RoundingMode roundingMode, String symbolString获取指定精度和符号的字符串结果
buildIntegerInteger获取整数结果
buildIntegerRoundingMode roundingModeInteger获取指定取整模式的整数结果
buildLongLong获取长整型结果
buildLongRoundingMode roundingModeLong获取指定取整模式的长整型结果
buildDoubleDouble获取双精度浮点数结果
buildDoubleint scale, RoundingMode roundingModeDouble获取指定精度的双精度浮点数结果
buildFloatFloat获取单精度浮点数结果
buildFloatint scale, RoundingMode roundingModeFloat获取指定精度的单精度浮点数结果

静态方法

方法名参数返回值说明
compareToBigDecimal val1, BigDecimal val2int比较两个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标识是否为本机

核心方法列表

方法名参数返回值说明
commandString cmdString执行系统命令
getMacString ipString获取指定IP的MAC地址
getIPAndMacsList<JSONObject>获取ARP缓存中的所有IP和MAC
scanAllLanDevicesString subnet, int start, int endList<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方法

批量插入数据

批量插入数据,自动按指定大小分组。支持两种重载形式:

  1. 直接插入指定类型的列表:
boolean success = KPCollectionUtil.insertBatch(userMapper, userList, 100);
  1. 插入需要类型转换的列表:
boolean success = KPCollectionUtil.insertBatch(userMapper, dtoList, User.class, 100);

参数说明:

  • baseMapper: MyBatis-Plus的BaseMapper接口实例
  • list: 待插入的数据列表
  • clazz: 插入时需要转换的实体类(第二种形式)
  • batchSize: 每组大小(每次插入数量,避免数据太大数据库报错),默认100, 例如dtoList有2万条,100 表示每次插入100条 总的执行 2000/100 次sql

返回值: 是否全部插入成功

核心方法列表

方法名参数返回值说明
isEqualsT element, List<T> listboolean检查元素是否在列表中
isContainString element, List<String> listboolean检查字符串是否包含在列表中
indexList<?> list, String field, String conditionInteger查找对象属性在列表中的位置
pagingList<?> list, Integer pageNo, Integer pageSizeList<?>集合物理分页
getFileNameDisjunctionClass clazz, Class clazz2, String prefixString获取两个对象字段的差集
insertBatchParentMapper<T> baseMapper, List<T> list, int batchSizeboolean批量插入同类型数据
insertBatchParentMapper<T> baseMapper, List list, Class<T> clazz, int batchSizeboolean批量插入并转换类型数据

使用示例

以下是一个完整的使用示例,展示了如何在实际业务中使用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对象)

核心方法列表

方法名参数返回值说明
groupConcatString column, boolean distinct, String aliasString聚合函数:将字段按指定分隔符拼接(兼容不同数据库)
groupDistinctConcatString column, String aliasString聚合函数:将字段去重后按指定分隔符拼接(兼容不同数据库)
groupFieldsByMPJLambdaWrapper<T> wrapper, String tableAlias, Class<T> entityClassvoid根据实体类自动生成适用于不同数据库的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();

核心方法列表

方法名参数返回值说明
addDaysDate date, int days, boolean includeTimeDate日期增减天数
formatDate date, String patternString时间格式化为字符串
formatString date, String patternString字符串日期格式化
formatString date, String inputPattern, String outputPatternString转换日期格式
parseString dateTimeString, String patternDate字符串解析为 Date 对象
addHoursDate startDate, int hoursDate时间增减小时
addMinutesDate startDate, int minutesDate时间增减分钟
addSecondsDate startDate, int secondsDate时间增减秒数
addDaysDate startDate, int daysDate时间增减天数
addMonthsDate startDate, int monthsDate时间增减月数
addYearsDate startDate, int yearsDate时间增减年数
compareDate date1, Date date2int时间比较
minDate date1, Date date2Date获取两个时间的较小值
maxDate date1, Date date2Date获取两个时间的较大值
daysBetweenDate startDate, Date endDateint两个日期的天数差(不含今天)
daysBetweenIncludeTodayDate startDate, Date endDateint两个日期的天数差(包含今天)
getYearDate dateint获取日期的年份
getMonthDate dateint获取日期的月份(1-12)
getDayDate dateint获取日期的天数(1-31)
getDaysOfMonthDate dateint获取当月的总天数
getDaysOfYearDate dateint获取当年的总天数
getMinDayOfMonthDate dateDate获取当月最小日期(1号)
getMaxDayOfMonthDate dateDate获取当月最大日期
getMinDayOfWeekString获取本周周一日期
getMaxDayOfWeekString获取本周周日日期
timestampToDateString seconds, String formatString时间戳转换为日期字符串
dateToTimestampString dateStr, String formatLong日期字符串转换为时间戳(毫秒)
getTimestampString获取当前秒级时间戳
getWeeHoursDate获取当天凌晨(00:00:00)
getFirstDayOfYearDate dateDate获取指定年份的第一天
getLastDayOfYearDate dateDate获取指定年份的最后一天
toDateLocalDateTime localDateTimeDateLocalDateTime 转换为 Date
toDateLocalDate localDateDateLocalDate 转换为 Date
toLocalDateTimeDate dateLocalDateTimeDate 转换为 LocalDateTime
toMinuteSecondint secondsString秒数转换为分秒格式字符串
getServerStartDateDate获取服务器启动时间
getDurationDate endDate, Date nowDateString计算两个时间差(天、时、分)

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();

核心方法列表

方法名参数返回值说明
addDaysLocalDateTime date, int days, boolean includeTimeLocalDateTime日期增减天数
formatLocalDateTime date, String patternString时间格式化为字符串
formatString date, String patternString字符串日期格式化
formatString date, String inputPattern, String outputPatternString转换日期格式
parseString dateTimeString, String patternLocalDateTime字符串解析为 LocalDateTime 对象
addHoursLocalDateTime startDate, int hoursLocalDateTime时间增减小时
addMinutesLocalDateTime startDate, int minutesLocalDateTime时间增减分钟
addSecondsLocalDateTime startDate, int secondsLocalDateTime时间增减秒数
addDaysLocalDateTime startDate, int daysLocalDateTime时间增减天数
addMonthsLocalDateTime startDate, int monthsLocalDateTime时间增减月数
addYearsLocalDateTime startDate, int yearsLocalDateTime时间增减年数
compareLocalDateTime date1, LocalDateTime date2int时间比较
minLocalDateTime date1, LocalDateTime date2LocalDateTime获取两个时间的较小值
maxLocalDateTime date1, LocalDateTime date2LocalDateTime获取两个时间的较大值
daysBetweenLocalDate startDate, LocalDate endDatelong两个日期的天数差(不含今天)
daysBetweenIncludeTodayLocalDate startDate, LocalDate endDatelong两个日期的天数差(包含今天)
getYearLocalDateTime dateint获取日期的年份
getMonthLocalDateTime dateint获取日期的月份(1-12)
getDayLocalDateTime dateint获取日期的天数(1-31)
getDaysOfMonthLocalDateTime dateint获取当月的总天数
getDaysOfYearLocalDateTime dateint获取当年的总天数
getMinDayOfMonthLocalDateTime dateLocalDateTime获取当月最小日期(1号)
getMaxDayOfMonthLocalDateTime dateLocalDateTime获取当月最大日期
getMinDayOfWeekString获取本周周一日期
getMaxDayOfWeekString获取本周周日日期
timestampToDateString seconds, String formatString时间戳转换为日期字符串
dateToTimestampString dateStr, String formatLong日期字符串转换为时间戳(毫秒)
getTimestampString获取当前秒级时间戳
getWeeHoursLocalDateTime获取当天凌晨(00:00:00)
getFirstDayOfYearLocalDateTime dateLocalDateTime获取指定年份的第一天
getLastDayOfYearLocalDateTime dateLocalDateTime获取指定年份的最后一天
toDateLocalDateTime localDateTimeDateLocalDateTime 转换为 Date
toDateLocalDate localDateDateLocalDate 转换为 Date
toLocalDateTimeDate dateLocalDateTimeDate 转换为 LocalDateTime
toMinuteSecondint secondsString秒数转换为分秒格式字符串
getServerStartDateLocalDateTime获取服务器启动时间
getDurationLocalDateTime endDate, LocalDateTime nowDateString计算两个时间差(天、时、分)
formatDurationLong millisecondsString将毫秒数转换为时间字符串
getSecondsBetweenLocalDateTime startTime, LocalDateTime endTimelong计算两个日期时间相差的秒数
secondsUntilEndOfDaylong获取到当日结束的秒数

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");

核心方法列表

方法名参数返回值说明
formatLocalDate date, String patternString时间格式化为字符串
formatString date, String patternString字符串日期格式化
formatString date, String inputPattern, String outputPatternString转换日期格式
parseString dateTimeString, String patternLocalDate字符串解析为 LocalDate 对象
parseString dateTimeStringLocalDate字符串解析为 LocalDate 对象(默认格式)
addDaysLocalDate date, int daysLocalDate日期增减天数
addMonthsLocalDate date, int monthsLocalDate时间增减月数
addYearsLocalDate date, int yearsLocalDate时间增减年数
compareLocalDate date1, LocalDate date2int时间比较
minLocalDate date1, LocalDate date2LocalDate获取两个时间的较小值
maxLocalDate date1, LocalDate date2LocalDate获取两个时间的较大值
daysBetweenLocalDate startDate, LocalDate endDatelong两个日期的天数差(不包含结束日)
daysBetweenIncludeTodayLocalDate startDate, LocalDate endDatelong两个日期的天数差(包含结束日)
getYearLocalDate dateint获取日期的年份
getMonthLocalDate dateint获取日期的月份(1-12)
getDayLocalDate dateint获取日期的天数(1-31)
getDaysOfMonthLocalDate dateint获取当月的总天数
getDaysOfYearLocalDate dateint获取当年的总天数
getMinDayOfMonthLocalDate dateLocalDate获取当月最小日期(1号)
getMaxDayOfMonthLocalDate dateLocalDate获取当月最大日期
getMinDayOfWeekString获取本周周一日期
getMaxDayOfWeekString获取本周最后一天日期
getFirstDayOfYearLocalDate dateLocalDate获取指定年份的第一天
getLastDayOfYearLocalDate dateLocalDate获取指定年份的最后一天
getMonthsBetweenLocalDate beginDate, LocalDate endDatelong计算两个日期之间的月数差
getYearsBetweenLocalDate beginDate, LocalDate endDatelong计算两个日期之间的年数差
isBetweenLocalDate date, LocalDate start, LocalDate endboolean判断日期是否在指定范围内(包含边界)
getEffectiveDateLocalDate localDateLocalDate获取有效日期(若输入日期为null则返回当前日期)
getEffectiveDateString localDateStringLocalDate获取有效日期(字符串解析,异常时返回当前日期)

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: 要导出的数据列表

核心方法列表

方法名参数返回值说明
exportByTemplateString filename, String tempLatePath, List<?> listvoid根据模板路径导出Excel
exportByTemplateString filename, InputStream inputStream, List<?> listvoid根据模板流导出Excel
exportByTemplateString filename, InputStream inputStream, Object... objvoid根据模板流导出复杂Excel
minioExprotByTemplateString bucketName, String fileName, List<?> listvoid从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。

byte[] qrWithLogo = KPFileUtil.encodeWithLogo("https://example.com/qrcode.png", "iVBORw0KGgoAAAANSUhEUgAAAAUA");

参数说明:

  • qrCodeUrl: 二维码URL
  • logoBase64: 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: 文件路径列表

核心方法列表

方法名参数返回值说明
createFolderString folderPathboolean创建文件夹
isFileString filePathboolean判断是否为文件
deleteFileString filePathboolean删除单个文件
deleteFolderString folderPathvoid递归删除文件夹
saveFileFromBase64String folderPath, String fileName, String base64StrString将Base64字符串保存为文件
base64String2ByteFunString base64Strbyte[]Base64字符串转字节数组
byte2Base64StringFunbyte[] bytesString字节数组转Base64字符串
getBytesByFileString filePathbyte[]从文件读取字节数组
writeBytesToFilebyte[] bytes, String folderPath, String fileNamevoid将字节数组写入文件
readBytesFromUrlString urlStrbyte[]从URL读取字节流
downloadFileString urlStr, String localFolderPathFile下载网络文件到本地
encodeWithLogoString qrCodeUrl, String logoBase64byte[]在二维码图片中间添加Logo
getUniqueNameMap<String, Integer> existingNames, String originalNameString处理重复文件名
findAllFilesFile dir, List<String> filePathsvoid查找目录下的所有文件

图标打印工具类-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: 图标颜色,使用类中提供的颜色常量

核心方法列表

方法名参数返回值说明
printlnString color, Listt<String> bodyvoid打印自定义文本(默认居中)
printlnString color, Listt<String> body, Boolean isCentervoid打印自定义文本
okString colorvoid打印成功图标

身份证工具类-KPIDCardUtil

身份证工具类,提供根据身份证号码获取年龄和性别的功能。

根据身份证获取年龄

根据身份证号码计算并返回年龄。

Integer age = KPIDCardUtil.getUserAge("身份证号码");

参数说明:

  • idCard: 身份证号码

返回值: 年龄,如果身份证号码无效则返回null

根据身份证获取性别

根据身份证号码获取性别信息。

// 不带姓名的版本
String gender = KPIDCardUtil.getUserSex("身份证号码");

// 带姓名的版本
String genderWithPrefix = KPIDCardUtil.getUserSex("张三", "身份证号码");

参数说明:

  • realName: 真实姓名(带姓名的版本)
  • idCard: 身份证号码

返回值:

  • 不带姓名的版本返回"先生"或"女士"
  • 带姓名的版本返回"张先生"或"张女士"(姓名首字+性别)
  • 如果身份证号码无效则返回null

核心方法列表

方法名参数返回值说明
getUserAgeString idCardInteger根据身份证获取年龄
getUserSexString idCardString根据身份证获取性别
getUserSexString realName, String idCardString根据姓名和身份证获取带前缀的性别称呼

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响应对象

核心方法列表

方法名参数返回值说明
downloadFileInputStream inputStream, String originalFileNamevoid下载文件(使用当前请求的响应对象)
downloadFileInputStream inputStream, String originalFileName, HttpServletResponse responsevoid下载文件(指定响应对象)
downloadLocalFileString localFilePath, HttpServletResponse responsevoid下载本地文件
setDownloadResponseHeaderString fileName, HttpServletResponse responsevoid设置下载响应头(不指定文件大小)
setDownloadResponseHeaderString fileName, long fileSize, HttpServletResponse responsevoid设置下载响应头(指定文件大小)

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 异常

核心方法列表

方法名参数返回值说明
getClientIPHttpServletRequest requestString从请求中获取客户端真实IP
getClientIPString获取当前请求的客户端IP
isInternalIpString ipboolean判断是否为内网IP
getHostNameString获取本地主机名
getHostIpString获取本地IP地址
isPortOccupiedString host, int portboolean检查端口是否被占用
findAvailablePortString host, int startPortint查找可用端口

使用示例

以下是一些典型的使用场景示例:

示例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 valueKPJSONFactoryUtil添加键值对
put(Boolean isNull, String key, Object value)Boolean isNull, String key, Object valueKPJSONFactoryUtil条件性添加键值对
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

核心方法列表

方法名参数返回值说明
toJavaObjectObject obj, Class<T> clazzT将对象转换为指定类型的Java对象
toJavaObjectJSONObject jsonObject, Class<T> clazzT将JSONObject转换为指定类型的Java对象
toJavaObjectNotEmptyObject obj, Class<T> clazzT将对象转换为指定类型的Java对象并去除null值
toJavaObjectListObject obj, Class<T> clazzList<T>将对象转换为指定类型的Java对象列表
toJavaObjectListString jsonString, Class<T> clazzList<T>将JSON字符串转换为指定类型的Java对象列表
toJsonObject objJSONObject将Java对象转换为JSONObject
toJsonString jsonStrJSONObject将JSON字符串转换为JSONObject
toJsonStringObject objString将Java对象转换为JSON字符串
mergeJsonJSONObject... jsonJSONObject合并多个JSONObject
toHashMapJSONObject jsonHashMap将JSONObject转换为HashMap
toTreeMapJSONObject jsonTreeMap将JSONObject转换为TreeMap
isJsonString jsonStrboolean判断字符串是否为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_TIME60 * 60 * 24 * 10Token过期时间(10天,单位秒)
KEY"authToken"Token中存储值的键名
SECRET"Y29tLnNtYWxsLnNob3BwaW5n"加密密钥
SUBJECT"GALAXY-DATA-SYSTEM-CA"Token主题

核心方法列表

方法名参数返回值说明
createTokenString valString生成JWT Token
verifyTokenString tokenboolean验证JWT Token
parseTokenString tokenClaim解析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: 盐值

返回值: 加密后的密码字符串

核心方法列表

方法名参数返回值说明
md5EncryptionString str, int numString对字符串进行指定次数的MD5加密
randomSaltString生成16位随机盐值
encryptionString password, String saltString使用盐值对密码进行加密

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

核心方法列表

方法名参数返回值说明
bucketExistsString bucketNameboolean检查存储桶是否存在
createBucketString bucketNamevoid创建存储桶
setBucketAccessPolicyString bucketName, Boolean isPublicvoid设置存储桶权限
listBucketNamesList<String>列出所有存储桶名称
listBucketsList<Bucket>列出所有存储桶
removeBucketString bucketNameboolean删除存储桶
listObjectNamesString bucketName, Boolean isFileList<String>列出存储桶中的所有对象名称
listObjectsString bucketName, Boolean isFileIterable<Result<Item>>列出存储桶中的所有对象
putObjectString bucketName, String objectName, String fileNameboolean通过文件上传对象
putObjectString bucketName, String objectName, InputStream streamboolean通过输入流上传对象
getObjectString bucketName, String objectNameInputStream获取对象(以流形式)
getObjectString bucketName, String objectName, long offset, Long lengthInputStream获取对象(断点下载)
getObjectString bucketName, String objectName, String fileNameboolean下载对象到本地文件
removeObjectString bucketName, String objectNameboolean删除对象
removeObjectString bucketName, List<String> objectNamesList<String>批量删除对象
copyObjectString bucketName, String objectName, String newBucketName, String newObjectNameObjectWriteResponse复制对象
copyTemporaryFileString folder, String filePath, String newBucketNameString复制临时文件
getUrlString bucketName, String objectName, Integer hoursString生成对象访问URL(按小时)
getUrlString bucketName, String objectName, Integer time, TimeUnit timeUnitString生成对象访问URL(按时间单位)
statObjectString bucketName, String objectNameStatObjectResponse获取对象元数据

数值工具类-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: 编号前缀

返回值: 生成的唯一编号字符串,格式为"前缀-日期时间-随机数"

核心方法列表

方法名参数返回值说明
rodint start, int endint获取指定范围内的随机整数
randomint length, String patternString随机生成指定位数的随机数
queryNumberString strList<Integer>提取字符串中的所有数字
queryNumberSplitString strMap<Integer, String>提取字符串中的数字及其后续内容
createNumberString project, String prefixString通过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: 请求头参数Map
  • tokenName: 认证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

核心方法列表

方法名参数返回值说明
getString urlString执行GET请求
getString url, HashMap headerMapString带请求头的GET请求
getByJsonString url, HashMap headerMapJSONObject执行GET请求并以JSON对象形式返回
getString url, String tokenName, String tokenString带认证token的GET请求
postXmlString url, String xmlStringPOST XML数据
postJsonString url, String jsonStringPOST JSON数据
postJsonByJsonString url, String jsonJSONObjectPOST JSON数据并以JSON对象形式返回
postJsonString url, String json, String tokenName, String tokenString带认证token的POST JSON请求
postJsonString url, String json, HashMap headerMapString带请求头的POST JSON请求
postJsonByJsonString url, String json, HashMap headerMapJSONObject带请求头的POST JSON请求并以JSON对象形式返回
postJsonAllString url, String json, HashMap headMapResponseBody获取完整响应信息
postJsonAllString url, String jsonResponseBody获取完整响应信息(无请求头)
postFormString url, String requestStringPOST表单数据
postFormString url, String request, HashMap headerMapString带请求头的POST表单数据

响应体类-ResponseBody

包含HTTP响应的完整信息。

核心属性

属性名类型说明
responseStrString响应体内容
headersHeaders响应头信息

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: 要发送的消息对象列表

核心方法列表

方法名参数返回值说明
sendDeadMessageString exchangeName, String routingKey, Object msgvoid发送单条Dead队列消息
sendDeadMessageListString exchangeName, String routingKey, List<?> msgsvoid批量发送Dead队列消息
sendFanoutMessageString exchangeName, Object msgvoid发送单条Fanout队列消息
sendFanoutMessageListString exchangeName, List<?> msgsvoid批量发送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: 结束位置

返回值:

  • setListsetListByLeftPushsetListByLeftPushAllsetListByRightPushsetListByRightPushAll方法无返回值
  • 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: 要删除的字段名,可变参数

返回值:

  • setHashgetHashSize方法无返回值
  • 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: 时间单位

返回值:

  • 根据具体方法而定

核心方法列表

方法名参数返回值说明
setString key, Object valuevoid设置键值对(永久保存,已废弃)
setString key, Object value, long timeoutvoid设置键值对并指定过期时间(秒)
setString key, Object value, long timeout, TimeUnit timeUnitvoid设置键值对并指定过期时间和单位
getString keyObject获取键对应的值
getStringString keyString获取键对应的字符串值
getIntegerString keyInteger获取键对应的整数值
setListString key, long index, Object valuevoid在指定位置设置List元素
setListByLeftPushString key, Object objvoid从左侧推入元素到List
setListByLeftPushAllString key, List<T> listvoid批量从左侧推入元素到List
setListByRightPushString key, Object objvoid从右侧推入元素到List
setListByRightPushAllString key, List<T> listvoid批量从右侧推入元素到List
getListString keyList获取List所有元素
getListString key, long start, long endList获取List指定范围元素
getListSizeString keylong获取List大小
removeListString key, Object valueLong删除List中指定值的元素
setSetString key, Object... valuesvoid添加元素到Set
getSetSizeString keylong获取Set大小
setSetString keySet获取Set所有元素
removeSetString key, Object... valueslong删除Set中指定元素
setZSetString key, Object value, double scorevoid添加元素到有序集合
setZSetString key, Set setvoid批量添加元素到有序集合
getZSetString key, long start, long endSet获取有序集合指定范围元素
getZSetString keySet获取有序集合所有元素
getZSetSizeString keylong获取有序集合大小
setHashString key, Object hashKey, Object valuevoid设置Hash中的字段值
getHashSizeString keyvoid获取Hash中字段的大小
getHashString key, Object hashKeyObject获取Hash中指定字段的值
getHashString keyMap<String, Object>获取Hash中所有字段和值
removeHashObject key, Object... hashKeysLong删除Hash中指定字段
hasKeyString keyboolean判断键是否存在
ttlString keylong获取键的过期时间(秒)
expireString key, long timeoutBoolean设置键的过期时间(秒)
expireString key, long timeout, TimeUnit timeUnitBoolean设置键的过期时间(指定单位)
incrString key, long deltalong增加键的值
keysString patternSet<String>查找匹配模式的键
removeString keyvoid删除键
removeBacthString keyvoid批量删除键
getSizeObject keylong获取键对应值的大小
lockString key, int value, long releaseTimeboolean获取分布式锁
lockString key, long releaseTimeboolean获取分布式锁(简化版)

反射工具类-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方法列表

核心方法列表

方法名参数返回值说明
getFieldObject obj, String fieldNameObject通过反射获取指定字段
getAllDeclaredFieldsClass<?> clazzList<Field>获取所有Field包括父类
getAllDeclaredFieldsClass<?> clazz, List<String> excludeFieldListsList<Field>获取所有Field包括父类(排除指定字段)
getAllDeclaredFieldsClass<?> clazz, List<String> excludeFieldLists, List<String> globalListList<Field>获取所有Field包括父类(指定包含字段)
isObjectEmptyObject obj, List<String> excludeFieldLists, Boolean checkSuperClassFieldsboolean判断对象及其所有属性是否为空
getGetterMethodsObject objList<Method>获取对象的getter方法
getMethodObject obj, String methodNameObject调用对象的指定方法
getMethodString packageName, String className, String methodNameObject通过包名、类名和方法名调用静态方法
setPropetryObject obj, String propetryName, Object valuevoid通过反射给变量赋值
setPropetryMethodObject obj, String propetryName, String valuevoid通过反射给参数赋值(String类型)
setPropetryMethodObject obj, String propetryName, Integer valuevoid通过反射给参数赋值(Integer类型)
setPropetryMethodObject obj, String propetryName, Date valuevoid通过反射给参数赋值(Date类型)
setPropetryMethodObject obj, String propetryName, boolean valuevoid通过反射给参数赋值(boolean类型)
getSetterMethodsObject objList<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

核心方法列表

方法名参数返回值说明
getJSONParamHttpServletRequest requestJSONObject获取JSON请求参数
getParamHttpServletRequest requestJSONObject获取请求参数Map
getRequestHttpServletRequest获取当前请求对象
setRequestvoid设置请求上下文
clearRequestvoid清理请求上下文
queryHandlerMethodHttpServletRequest reqHandlerMethod获取请求处理器方法
getQueryParamsString urlMap<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对象

核心方法列表

方法名参数返回值说明
writeJsonHttpServletResponse response, Object jsonDatavoid向指定的HttpServletResponse写入JSON数据
writeJsonJSONObject jsonDatavoid向当前线程绑定的HttpServletResponse写入JSON数据
getResponseHttpServletResponse获取当前线程绑定的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实例

核心方法列表

方法名参数返回值说明
getApplicationContextApplicationContext获取Spring的ApplicationContext对象
getBeanString nameT通过名称获取Bean实例
getBeanClass<T> clazzT通过类型获取Bean实例
getBeanString name, Class<T> clazzT通过名称和类型获取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

核心方法列表

方法名参数返回值说明
isContainString str, String[] arrboolean判断字符串是否在数组中
initialsUpperCaseString strString字符串首字母大写
initialsLowerCaseString strString字符串首字母小写
isEmptyString/LocalDate/List
Object/Integer/Double
Long str
boolean判断对象是否为空
isNotEmptyString/List/Object
Integer/LocalDate value
boolean判断对象是否不为空
getClassAndMethodNameString获取当前类和方法名
formatString format, Object... argsString字符串格式化
emptyFormatString oldStr, String newStrString为空格式化
emptyFormatString oldStr, String newStr, String splitString为空格式化并添加分隔符
toStringString txtTypeString对象转字符串
toStringString txtType, String defaultValueString对象转字符串(指定默认值)
toStringString txtType, String defaultValue, String jointString对象转字符串(指定默认值和连接符)
convertToPinyinString chineseString汉字转换为拼音
convertToPinyinFirstLetterString chineseString汉字转换为拼音首字母

线程工具类-KPThreadUtil

线程操作工具类,提供线程相关的便捷操作方法。该工具类目前包含线程休眠功能,用于在多线程编程中实现延迟执行。

线程休眠

使当前线程休眠指定的时间(毫秒)。

// 使当前线程休眠1000毫秒(1秒)
KPThreadUtil.sleep(1000);

// 使当前线程休眠500毫秒
KPThreadUtil.sleep(500);

参数说明:

  • sleepTime: 休眠时间(毫秒)

返回值: void

异常说明: 如果线程在休眠期间被中断,不会抛出异常,而是静默处理InterruptedException

核心方法列表

方法名参数返回值说明
sleepInteger sleepTimevoid使当前线程休眠指定时间(毫秒)

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"

核心方法列表

方法名参数返回值说明
getUUIDString生成标准UUID
getSimpleUUIDString生成去除连接符的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:不允许为空)

核心方法列表

方法名参数返回值说明
notNullObject str, String errMegvoid校验对象非空
notNullString str, String errMegvoid校验字符串非空
notNullInteger num, String errMegvoid校验整数非空
notNullLong num, String errMegvoid校验长整型非空
notNullDouble num, String errMegvoid校验双精度浮点数非空
notNullDate date, String errMegvoid校验日期非空
notNullBigDecimal str, String errMegvoid校验BigDecimal非空
notNullList<?> list, String errMegvoid校验列表非空
notNullMultipartFile filevoid校验文件非空
lengthString str, Integer min, Integer max, String errMegvoid校验字符串长度范围
lengthInteger num, Integer min, Integer max, String errMegvoid校验整数范围
lengthBigDecimal str, Integer min, Integer max, String errMegvoid校验BigDecimal范围
lengthDouble str, Integer min, Integer max, String errMegvoid校验双精度浮点数范围
lengthLong str, Integer min, Integer max, String errMegvoid校验长整型范围
minLengthString str, Integer min, String errMegvoid校验字符串最小长度
minLengthInteger num, Integer min, String errMegvoid校验整数最小值
minLengthDouble num, Integer min, String errMegvoid校验双精度浮点数最小值
minLengthLong num, Integer min, String errMegvoid校验长整型最小值
maxLengthString str, Integer max, String errMegvoid校验字符串最大长度
maxLengthInteger str, Integer max, String errMegvoid校验整数最大值
maxLengthLong str, Integer max, String errMegvoid校验长整型最大值
maxLengthDouble str, Integer max, String errMegvoid校验双精度浮点数最大值
lengthIsNotString str, Integer min, Integer max, String errMegvoid有条件校验字符串长度范围
lengthIsNotInteger num, Integer min, Integer max, String errMegvoid有条件校验整数范围
lengthIsNotBigDecimal str, Integer min, Integer max, String errMegvoid有条件校验BigDecimal范围
lengthIsNotDouble str, Integer min, Integer max, String errMegvoid有条件校验双精度浮点数范围
lengthIsNotLong str, Integer min, Integer max, String errMegvoid有条件校验长整型范围
twoChoiceOneObject fileId1, String fileId1Name, List<String> fileId2, String fileId2Name, boolean isEmptyvoid二选一校验
twoChoiceOneObject fileId1, String fileId1Name, Object fileId2, String fileId2Name, boolean isEmptyvoid二选一校验
twoChoiceOneList<Object> fileId1, String fileId1Name, List<Object> fileId2, String fileId2Name, boolean isEmptyvoid二选一校验
notNullByMultipleChoiceString errMeg, String... strvoid多选一校验
matchesRuleMistakeString str, String Regex, String errMegvoid校验不满足正则表达式
matchesRuleString str, String Regex, String errMegvoid校验满足正则表达式
frequencyString source, String target, Integer min, Integer max, String errMegvoid校验字符串出现频率
lengthByStringString source, String str, Integer maxNum, String errMegvoid校验指定字符串后长度
emailString email, String errMeg, Boolean IsNullvoid校验邮箱格式

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对象

核心方法列表

方法名参数返回值说明
toJsonXmlString xml, String interfaceNmaeJSONArray将XML转换为JSONArray
jsonToXmlString xml, String interfaceNmaeJSONObject将XML转换为JSONObject
toJsonObjectJSONObject jsonJSONObject处理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"?>
  • 支持格式化输出
  • 支持命名空间处理

核心方法列表

方法名参数返回值说明
xml2jsonString xmlString将XML转换为JSON
json2xmlString jsonString将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格式

核心方法列表

方法名参数返回值说明
unInputStreamInputStream inputStream, String filePathList<ZipFilePO>解压文件流
decompressionByZipList<ZipFilePO> zipFilePOList, String fileNamevoid压缩文件流并下载
pathByInputStreamString localPathInputStream本地文件转输入流
unZipFileInputStream inputStream, String pathvoid解压ZIP文件到指定目录
unZipInputStreamInputStream inputStreamList<ZipFilePO>解压ZIP文件到内存
unRarFileInputStream inputStream, String pathvoid解压RAR文件到指定目录
unRarInputStreamInputStream inputStreamList<ZipFilePO>解压RAR文件到内存