参数校验工具类

一个通用的参数校验的工具类 对于请求入参的校验常用方法都是一堆if...else...来进行判空,长度校验。不仅代码又多又长,阅读性极差。本文由博主自己结合hibernate-validate框架,封装的小工具,进行优雅的参数校验。 阅读详情
public class CheckParamUtil {

    private static final List<Class<?>> DIGIT_CLASS         = Lists.newArrayList(new Class<?>[] {Integer.class, Long.class, Short.class});
    private static final String         DEFAULT_DATE_FORMAT = "yyyy-MM-dd";

    /**
     * 获取校验接口
     *
     * @param name
     * @param value
     * @return
     */
    public static Checker getChecker(String name, Object value) {
        return new Checker(name, value);
    }

    /**
     * 默认校验实现
     */
    public static class Checker {
        /**
         * 参数名称
         */
        private final String name;
        /**
         * 参数值
         */
        private final Object value;

        private Checker(String name, Object value) {
            this.name = name;
            this.value = value;
        }

        /**
         * 数字参数校验
         * <pre>
         * CheckParamUtil.getChecker("fieldName", null).digit() => success
         * CheckParamUtil.getChecker("fieldName", 1234).digit() => success
         * CheckParamUtil.getChecker("fieldName", "123").digit() => success
         * CheckParamUtil.getChecker("fieldName", 1.23).digit() => failure
         * CheckParamUtil.getChecker("fieldName", "1.23").digit() => failure
         * </pre>
         *
         * @return Checker
         */
        public Checker digit() {
            // NULL不做处理
            if (value == null) {
                return this;
            }
            // 数字
            if (DIGIT_CLASS.contains(value.getClass())) {
                return this;
            }
            // 字符串
            if (value instanceof String) {
                if (NumberUtils.isDigits((String) value)) {
                    return this;
                }
                throw new CCException(ErrorCodeEnum.PARAM_ERROR, name + " 必须是数字的字符串");
            }
            throw new CCException(ErrorCodeEnum.PARAM_ERROR, name + " 必须是数字");
        }

        /**
         * 参数非空
         * <pre>
         * CheckParamUtil.getChecker("fieldName", 1234).notNull() => success
         * CheckParamUtil.getChecker("fieldName", "1234").notNull() => success
         * CheckParamUtil.getChecker("fieldName", null).notNull() => failure
         * </pre>
         *
         * @return Checker
         */
        public Checker notNull() {
            if (value == null) {
                throw new CCException(ErrorCodeEnum.PARAM_ERROR, name + " 不能为空");
            }
            return this;
        }

        /**
         * 非空(用于集合)
         * <pre>
         * CheckParamUtil.getChecker("fieldName", {1,2,3,4}).notEmpty() => success
         * CheckParamUtil.getChecker("fieldName", {1:1, 2:2}).notEmpty() => success
         * CheckParamUtil.getChecker("fieldName", null).notEmpty() => failure
         * CheckParamUtil.getChecker("fieldName", {}).notEmpty() => failure
         * </pre>
         *
         * @return Checker
         */
        public Checker notEmpty() {
            notNull();

            if ((value instanceof Map) && CollectionUtils.isEmpty((Map<?, ?>) value)) {
                throw new CCException(ErrorCodeEnum.PARAM_ERROR, name + " 不能为空");
            }
            if ((value instanceof Collection) && CollectionUtils.isEmpty((Collection<?>) value)) {
                throw new CCException(ErrorCodeEnum.PARAM_ERROR, name + " 不能为空");
            }
            return this;
        }

        /**
         * 非空(用于字符串)
         * <pre>
         * CheckParamUtil.getChecker("fieldName", "string").notBlank() => success
         * CheckParamUtil.getChecker("fieldName", 12345678).notBlank() => failure
         * CheckParamUtil.getChecker("fieldName", " 1234 ").notBlank() => success
         * CheckParamUtil.getChecker("fieldName", null).notBlank() => failure
         * CheckParamUtil.getChecker("fieldName", "").notBlank() => failure
         * CheckParamUtil.getChecker("fieldName", "      ").notBlank() => failure
         * CheckParamUtil.getChecker("fieldName", "\r\t\n").notBlank() => failure
         * </pre>
         *
         * @return Checker
         */
        public Checker notBlank() {
            if (value == null || value instanceof String) {
                notNull();
                if (StringUtils.isBlank((String) value)) {
                    throw new CCException(ErrorCodeEnum.PARAM_ERROR, name + " 不能为空");
                }
            } else {
                throw new CCException(ErrorCodeEnum.PARAM_ERROR, name + " 必须是字符串");
            }
            return this;
        }

        /**
         * 长度
         * <pre>
         * CheckUtil.getChecker("fieldName", "12345").length(5) => success
         * CheckUtil.getChecker("fieldName", 12345).length(5) => success
         * CheckUtil.getChecker("fieldName", 0).length(0) => success
         * CheckUtil.getChecker("fieldName", "").length(0) => success
         * CheckUtil.getChecker("collectionName", emptyList).length(0) => true
         * CheckUtil.getChecker("collectionName", emptyList).length(3) => true
         * CheckUtil.getChecker("collectionName", oneElementList).length(3) => failure
         * CheckUtil.getChecker("collectionName", oneElementList).length(0) => failure
         * CheckUtil.getChecker("collectionName", 2).length(0) => failure
         * CheckUtil.getChecker("collectionName", "123456").length(0) => failure
         * CheckUtil.getChecker("fieldName", null).length(5) => failure
         * CheckUtil.getChecker("fieldName", "123456").length(5) => failure
         * CheckUtil.getChecker("collectionName", fiveElementList).length(3) => failure
         * </pre>
         *
         * @param length 长度
         * @return Checker
         */
        public Checker length(int length) {
            if (value == null || value instanceof String) {
                if (String.valueOf(value).length() != length) {
                    throw new CCException(ErrorCodeEnum.PARAM_ERROR, name + " 长度必须是" + length);
                }
                return this;
            } else if (value instanceof Collection) {
                if (((Collection<?>) value).size() != length) {
                    throw new CCException(ErrorCodeEnum.PARAM_ERROR, name + " 长度必须是" + length);
                }
                return this;
            } else if (value instanceof Integer) {
                if (String.valueOf(value).length() != length) {
                    throw new CCException(ErrorCodeEnum.PARAM_ERROR, name + " 长度必须是" + length);
                }
                return this;
            } else {
                throw new CCException(ErrorCodeEnum.PARAM_ERROR, name + " 必须是字符串、集合或数字");
            }
        }

        /**
         * 数字范围
         * <pre>
         * min == null && max != null => value <= max
         * min != null && max == null => value >= min
         * min != null && max != null => min <= value <= max
         * </pre>
         *
         * @param min
         * @param max
         * @return
         */
        public Checker range(Long min, Long max) {
            digit();

            Long val = Long.valueOf(value.toString());
            if (min != null && !(val >= min)) {
                throw new CCException(ErrorCodeEnum.PARAM_ERROR, name + " 必须大于" + min);
            }

            if (max != null && !(val <= max)) {
                throw new CCException(ErrorCodeEnum.PARAM_ERROR, name + " 必须小于等于" + max);
            }
            return this;
        }

        /**
         * 检查值是否等于或小于参数max
         *
         * @param max
         * @return
         */
        public Checker equalOrLessThan(Long max) {
            notNull();
            digit();
            Long val = null;
            if (value instanceof Long) {
                val = (Long) value;
            } else {
                val = Long.valueOf(value.toString());
            }
            if (max != null && (val > max)) {
                throw new CCException(ErrorCodeEnum.PARAM_ERROR, name + " 不能超过" + max);
            }
            return this;
        }

        /**
         * 检查字符串长度是否等于或小于参数max
         *
         * @param max
         * @return
         */
        public Checker lengthEqualOrLessThan(Integer max) {
            notNull();
            if (value instanceof String) {
                if (max != null && (((String) value).length() > max)) {
                    throw new CCException(ErrorCodeEnum.PARAM_ERROR, name + " 长度不能大于" + max);
                }
            } else {
                throw new CCException(ErrorCodeEnum.PARAM_ERROR, name + " 必须是字符串");
            }
            return this;
        }

        /**
         * 检查集合容量是否等于或小于参数max
         *
         * @param max
         * @return
         */
        public Checker sizeEqualOrLessThan(Integer max) {
            notNull();
            if (value instanceof Collection) {
                if (max != null && (((Collection<?>) value).size() > max)) {
                    throw new CCException(ErrorCodeEnum.PARAM_ERROR, name + " 不能大于" + max);
                }
            } else if ((value instanceof Map)) {
                if (max != null && (((Map<?, ?>) value).size() > max)) {
                    throw new CCException(ErrorCodeEnum.PARAM_ERROR, name + " 不能大于" + max);
                }
            } else {
                throw new CCException(ErrorCodeEnum.PARAM_ERROR, name + " 必须是集合");
            }
            return this;
        }

        /**
         * 检查参数是否是日期格式(例:yyyyMMdd)
         *
         * @return
         */
        public Checker isDateFormat() {
            notBlank();
            try {
                DateFormat dateFormat = new SimpleDateFormat((String) value);
                Date date = new Date();
                // 判断入参是否能当作模板来格式化时间
                String dateString = dateFormat.format(date);
                // 将格式化后的时间转换为Date
                Date parse = dateFormat.parse(dateString);
                // 判断时间格式化前后,年份是否一致
                if (date.getYear() != parse.getYear() || date.getMonth() != parse.getMonth() || date.getDay() != parse.getDay()) {
                    throw new CCException(ErrorCodeEnum.PARAM_ERROR, name + " 时间类型的默认值不正确,只允许日期格式模板,例如“yyyyMMdd或yyyy-MM-dd”");
                }
                return this;
            } catch (Throwable throwable) {
                // 捕获类型转换,空指针或非法参数异常
                throw new CCException(ErrorCodeEnum.PARAM_ERROR.getCode(), name
                        + " 时间类型的默认值不正确,只允许日期格式模板,例如“yyyyMMdd”", throwable);
            }
        }

        /**
         * 检查值是否是时间(例:2020-03-10)
         *
         * @return
         */
        public Checker isDateyyyyMMdd() {
            notBlank();
            try {
                DateFormat dateFormat = new SimpleDateFormat(DEFAULT_DATE_FORMAT);
                dateFormat.parse((String) value);
                return this;
            } catch (Throwable throwable) {
                throw new CCException(ErrorCodeEnum.PARAM_ERROR.getCode(), name + " 时间类型的值不能为空,且只允许yyyy-MM-dd格式", throwable);
            }
        }

        /**
         * 检查两个字符是否相等
         *
         * @param equalsParam  需要比较的参数
         * @param errorMessage 错误信息
         * @return
         */
        public Checker equals(String equalsParam, String errorMessage) {
            notBlank();
            if (StringUtils.equals((String) value, equalsParam)) {
                return this;
            } else {
                throw new CCException(ErrorCodeEnum.PARAM_ERROR.getCode(), errorMessage);
            }
        }

        /**
         * 判断表达式是否成立,如不成立则抛出异常,异常为errorMessage
         *
         * @param errorMessage 表达式不成立
         * @return
         */
        public Checker isTrue(String errorMessage) {
            if (!(value instanceof Boolean)) {
                throw new CCException(ErrorCodeEnum.PARAM_ERROR.getCode(), errorMessage);
            }
            if (!(Boolean) value) {
                throw new CCException(ErrorCodeEnum.PARAM_ERROR.getCode(), errorMessage);
            }
            return this;
        }
    }
}
Java校验参数工具类 这是自己开发的一个参数校验的工具类,可用于对实例的属性进行非空校验。包括全部校验和任一校验两种校验方式。 举例:CheckParamsUtils.checkParamsAll(requestBean, "name", "age","gender"); 立即下载

相关推荐

Zephyr、FreeRTOS 和 RT-Thread

你是…更适合用嵌入式新手,刚接触 RTOSFreeRTOS(入门简单)IoT 项目开发,需要 BLE/WiFi/MQTTZephyr(协议全)想快速构建可部署的产品Zephyr(模块统一)只做单个任务或简单状态机控制FreeRTOS(轻量)做平台化、持续集成、自动测试Zephyr(CI 支持强)

is0815的博客 2240

参数验证工具

参数校验始终不会少,但是如何让代码更加简洁?令人深思 接下来介绍一个参数验证工具定义一个自定义注解 判断工具 使用 DTO定义

491

sap 新增科目表_SAP系统中四大科目表的总结

操作科目表定义-OB13 2国家科目表定义-OB13 3集团科目表定义-OB13 4合并科目表(ECCS)定义-CX10 4分配操作科目表到公司代码-OB62 5分配国家科目表到公司代码-OB62 6分配集团科目表到操作科目表-OB13 6分配集团科目表到合并科目表-CXNF 7Operation 8定义集团科目表的科目-FSP0 8定义国家科目表的科目-FSP0 8定义操作科目表的科目-FSP0...

weixin_39585463的博客 1721

校验参数个数工具类

项目中有个需求:前后端参数一致性校验,在某业务场景下后端代码需要校验参数个数,因此设计了1个工具类方便大伙使用,特此简单记录下。

jike11231的博客 800

从光耦隔离到稳定驱动:信捷伺服与STM32的硬件设计陷阱与救赎

本文深入探讨了信捷伺服驱动器与STM32微控制器配合时的硬件设计关键问题,包括光耦隔离电路选型、电源电压选择、拨码开关设置等核心环节。针对伺服驱动器的稳定驱动需求,提供了从电路设计到抗干扰策略的完整解决方案,帮助工程师规避常见陷阱,提升工业控制系统的可靠性。

gold8的专栏 310

程序员实战:DINOv3 权重文件下载与本地化部署全流程指南

Meta开源的DINOv3视觉大模型凭借70亿参数和17亿图像训练,在语义分割、目标检测等任务表现优异。本文详解预训练权重的获取渠道、校验方法和加载实践。开发者可通过HuggingFace或GitHub获取不同版本权重,包括针对服务器端的ViT系列和边缘设备的ConvNeXt系列。文章提供MD5校验代码确保文件完整性,并给出PyTorch和Transformers两种加载方式。特别强调7B模型需16GB GPU内存,建议根据硬件条件选择合适版本,如边缘设备使用ConvNeXt-Tiny。最后指出DINOv3

xiugou3365的博客 5901

Spring Boot 参数校验、校验工具类

Spring Boot实现参数校验 参数校验的目的 不做参数校验带来的问题: 入库异常(数据库字段长度为50,实际数据长度为100) NPE异常(未接收到参数就进行调用) 被同事嫌弃(500行代码,250行都在用if…esle做参数校验) …… 做参数校验的好处: 规避了不必要的异常 减少代码量 …… 如何进行参数校验 if-else进行参数校验 写的代码可能是这个样子的?????当校验的参数个数变多,校验代码会惨不忍睹… 阅读代码的人的心情是这样的…… 硬编码校验的缺点: 代码行数会随着校

这有一片海的博客 4100

禁止使用服务器 IP 访问 Apache 环境下的 Web 站点

通过在 Apache 的配置文件中添加适当的指令,我们可以轻松地禁止使用服务器 IP 地址访问我们的 Web 站点。在 Apache 环境下,有时我们希望禁止用户使用服务器的 IP 地址直接访问我们的 Web 站点,而只允许使用域名进行访问。现在,当用户尝试使用服务器的 IP 地址来访问你的网站时,他们将会被拒绝访问,只有通过域名才能正常访问。为了实现这个目标,我们可以通过 Apache 的配置文件进行相应的设置。表示禁止对根目录的访问权限,即禁止使用服务器的 IP 地址进行访问。

TpCode的博客 944

Java参数校验工具类

用于java接口api参数的合法性校验

qq_43393995的博客 856

HarmonyOS 鸿蒙开发DevEco Studio OpenHarmony:安全测试

通过对HarmonyOS应用生命周期建模和应用攻击面建模,采用静态数据流分析技术,提高漏洞发现的准确率,同时覆盖20余种攻击面,65+漏洞测试项,帮助开发者提前发现和识别漏洞隐患。在检测报告中,会针对每一项漏洞风险项给出明确的修复建议,可以帮助开发者快速修复漏洞。

斌擎科技 1181

Vue3 - Element Plus 全局修改更换主题色配置详细教程,element-plus自定义主题色全局替换主色调强力解决方案,支持动态修改主题颜色/动态皮肤,将默认蓝色主题色更换为其他颜色!

vue3,nuxt3,element-plus,组件库,主题色,修改主题颜色,更换主题色,如何修改组件默认主题蓝色,项目主题色定制,修改失败,主题色覆盖不了,:root直接修改,hover颜色没改,自定义主题色,vue3全局设置elementPlus主题色最新详细修改教程,怎么修改全局的颜色,scss变量,覆盖原来的主题色改为自己的颜色,统一替换,有没有好办法,颜色不变,失败,无效,动态主题切换,主题颜色怎么在项目里直接改,plus主题色更换,覆盖默认主题色,最强最好用,设置主题色,换肤,皮肤,动态更换

🏆 前端领域优质创作者 1万+

Java 校验工具类 校验参数 校验数据 参数校验工具类

【代码】Java 校验工具类 校验参数 校验数据。

xiaoerbuyu1233的博客 332

大模型系列——Ollama简明教程

在这篇文章中,我们将了解如何使用 Ollama、如何在 Ollama 中创建自己的模型 以及如何使用 Ollama 构建聊天机器人。这是深入研究 Ollama 的第一部分,以及我所学到的有关本地 LLM 的知识以及如何将它们用于基于推理的应用程序。在这篇文章中,你将了解——

2401_84052244的博客 1万+

ValidationUtils 参数校验工具类

/** * @ClassName ValidationUtils * @Description 参数校验工具类 * @Author * @Date * @Version 1.0 */ public class ValidationUtils { /** * 使用hibernate的注解来进行验证 */ private static Validator validator = Validation .byProvider(Hibern

weixin_41624462的博客 832

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

【java工具类】参数校验工具类java判断是否为空

目录 前言: 参数校验工具类:封装在一个公有方法里面 应用案例: 完整的java类信息: 前言: 经常要遇到判断各种是否为空的情况,String有lang3的StringUtils,CollectionUtils。为啥子不能直接的放进一个工具类处理呢?这样业务的调用不是更为的简洁方便呢?对于JVM的优化也是好事情的呀!没有必要不断的编译第三方的jar和class文件呀 参数校验工具类:封装在一个公有方法里面 public class ValidateUtil { /**

java技术专家全栈成长之路 1620

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

参数校验工具类validator

spring boot项目,所以直接引入web的starter的依赖即可。 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> 常用的注解: public class Car { @NotBlank // 不能为null,不能为空字符串

Limitless* 的博客 765

写一个必传参数校验工具类

需要依赖: 1.(使用alibab的fastjson 把对象转成json的时候会自动去掉值为null的字段,所以用下面这个jackson依赖) 2.apache工具包 <dependency> <groupId>com.fasterxml.jackson.datatype</groupId> <artifactId>jackson-datatype-guava</artifactId

啊谋的博客 417

参数校验工具类BeanValidator

参数校验工具类

qingcyb的博客 586

后端参数校验工具类

后端参数校验工具类 1、应用场景 1、Controller层判断传入参数是否符合规则,不符合规则直接返回错误状态码。 2、其他需要校验参数的地方。 2、工具类 public class CheckUtil { /** * 中文,字母,数字 _ - . 30位 */ static String regexFNDT = "^[a-zA-Z0-9\\u4e00-\\u9...

LitongZero的博客 1733

StringTools 字符串/参数校验工具类

本文介绍了StringTools工具类,用于字符串和参数校验。核心功能包括:检查对象非空字段(checkParam)、字符串处理(upperCaseFirstLetter/isEmpty)、安全相关(encodeByMD5/pathIsOk/escapeHtml)以及实用方法(getFileSuffix/getRandomString等)。该工具类采用反射机制实现参数校验,支持MD5加密、路径安全检测等常见需求,适用于输入验证、数据清洗等场景,具有易用性和扩展性特点。

qq_45751976的博客 56

运行时参数数据类型校验工具类

工作所需进行工具封装,在此记录 import { isObject, isFunction, isString, isNumber, isArray, isBoolean, } from '../xxx'; /** * 运行时参数数据类型校验工具类 * @param {Object} data 源数据 * @param {Object} rules 校验规则 * @example * const data = { // 数据源 * phone: 1591231234,

weixin_44705701的博客 274

参数校验工具类,解析类上@NotNull等注解

【代码】参数校验工具类,解析类上@NotNull等注解。

kewen_123的博客 431

参数、业务 校验工具类

package com.cy.pj.common.util; import com.cy.pj.common.exception.ServiceException; /** * 通过此工具类封装对参数,执行过程,结果等业务的校验。 * @author qilei * */ public class AssertUtil { /**验证参数的有效性*/ public static void isArgumentValid(boolean statement,String msg) {

weixin_50029329的博客 228

java 多参数校验工具类

java 校验多个参数工具类 1、定义注解 2 编写工具类 3、使用步骤 ①需要校验的类字段上添加注解 如电话类tel中的phone字段: ②掉用

zy199701的博客 1842
上一篇: 异常工具类
下一篇: 序列号生成器
cuichen97
博客等级 码龄7年 34粉丝 209原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值