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;
}
}
}
相关推荐
Zephyr、FreeRTOS 和 RT-Thread
你是…更适合用嵌入式新手,刚接触 RTOSFreeRTOS(入门简单)IoT 项目开发,需要 BLE/WiFi/MQTTZephyr(协议全)想快速构建可部署的产品Zephyr(模块统一)只做单个任务或简单状态机控制FreeRTOS(轻量)做平台化、持续集成、自动测试Zephyr(CI 支持强)
参数验证工具
参数校验始终不会少,但是如何让代码更加简洁?令人深思 接下来介绍一个参数验证工具定义一个自定义注解 判断工具 使用 DTO定义
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...
校验参数个数工具类
项目中有个需求:前后端参数一致性校验,在某业务场景下后端代码需要校验参数个数,因此设计了1个工具类方便大伙使用,特此简单记录下。
从光耦隔离到稳定驱动:信捷伺服与STM32的硬件设计陷阱与救赎
本文深入探讨了信捷伺服驱动器与STM32微控制器配合时的硬件设计关键问题,包括光耦隔离电路选型、电源电压选择、拨码开关设置等核心环节。针对伺服驱动器的稳定驱动需求,提供了从电路设计到抗干扰策略的完整解决方案,帮助工程师规避常见陷阱,提升工业控制系统的可靠性。
程序员实战:DINOv3 权重文件下载与本地化部署全流程指南
Meta开源的DINOv3视觉大模型凭借70亿参数和17亿图像训练,在语义分割、目标检测等任务表现优异。本文详解预训练权重的获取渠道、校验方法和加载实践。开发者可通过HuggingFace或GitHub获取不同版本权重,包括针对服务器端的ViT系列和边缘设备的ConvNeXt系列。文章提供MD5校验代码确保文件完整性,并给出PyTorch和Transformers两种加载方式。特别强调7B模型需16GB GPU内存,建议根据硬件条件选择合适版本,如边缘设备使用ConvNeXt-Tiny。最后指出DINOv3
Spring Boot 参数校验、校验工具类
Spring Boot实现参数校验 参数校验的目的 不做参数校验带来的问题: 入库异常(数据库字段长度为50,实际数据长度为100) NPE异常(未接收到参数就进行调用) 被同事嫌弃(500行代码,250行都在用if…esle做参数校验) …… 做参数校验的好处: 规避了不必要的异常 减少代码量 …… 如何进行参数校验 if-else进行参数校验 写的代码可能是这个样子的?????当校验的参数个数变多,校验代码会惨不忍睹… 阅读代码的人的心情是这样的…… 硬编码校验的缺点: 代码行数会随着校
禁止使用服务器 IP 访问 Apache 环境下的 Web 站点
通过在 Apache 的配置文件中添加适当的指令,我们可以轻松地禁止使用服务器 IP 地址访问我们的 Web 站点。在 Apache 环境下,有时我们希望禁止用户使用服务器的 IP 地址直接访问我们的 Web 站点,而只允许使用域名进行访问。现在,当用户尝试使用服务器的 IP 地址来访问你的网站时,他们将会被拒绝访问,只有通过域名才能正常访问。为了实现这个目标,我们可以通过 Apache 的配置文件进行相应的设置。表示禁止对根目录的访问权限,即禁止使用服务器的 IP 地址进行访问。
Java参数校验工具类
用于java接口api参数的合法性校验
HarmonyOS 鸿蒙开发DevEco Studio OpenHarmony:安全测试
通过对HarmonyOS应用生命周期建模和应用攻击面建模,采用静态数据流分析技术,提高漏洞发现的准确率,同时覆盖20余种攻击面,65+漏洞测试项,帮助开发者提前发现和识别漏洞隐患。在检测报告中,会针对每一项漏洞风险项给出明确的修复建议,可以帮助开发者快速修复漏洞。
Vue3 - Element Plus 全局修改更换主题色配置详细教程,element-plus自定义主题色全局替换主色调强力解决方案,支持动态修改主题颜色/动态皮肤,将默认蓝色主题色更换为其他颜色!
vue3,nuxt3,element-plus,组件库,主题色,修改主题颜色,更换主题色,如何修改组件默认主题蓝色,项目主题色定制,修改失败,主题色覆盖不了,:root直接修改,hover颜色没改,自定义主题色,vue3全局设置elementPlus主题色最新详细修改教程,怎么修改全局的颜色,scss变量,覆盖原来的主题色改为自己的颜色,统一替换,有没有好办法,颜色不变,失败,无效,动态主题切换,主题颜色怎么在项目里直接改,plus主题色更换,覆盖默认主题色,最强最好用,设置主题色,换肤,皮肤,动态更换
Java 校验工具类 校验参数 校验数据 参数校验工具类
【代码】Java 校验工具类 校验参数 校验数据。
大模型系列——Ollama简明教程
在这篇文章中,我们将了解如何使用 Ollama、如何在 Ollama 中创建自己的模型 以及如何使用 Ollama 构建聊天机器人。这是深入研究 Ollama 的第一部分,以及我所学到的有关本地 LLM 的知识以及如何将它们用于基于推理的应用程序。在这篇文章中,你将了解——
ValidationUtils 参数校验工具类
/** * @ClassName ValidationUtils * @Description 参数校验工具类 * @Author * @Date * @Version 1.0 */ public class ValidationUtils { /** * 使用hibernate的注解来进行验证 */ private static Validator validator = Validation .byProvider(Hibern
NTscan扫描工具
ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。
怀旧版电脑GBC模拟器
再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。
【java工具类】参数校验工具类java判断是否为空
目录 前言: 参数校验工具类:封装在一个公有方法里面 应用案例: 完整的java类信息: 前言: 经常要遇到判断各种是否为空的情况,String有lang3的StringUtils,CollectionUtils。为啥子不能直接的放进一个工具类处理呢?这样业务的调用不是更为的简洁方便呢?对于JVM的优化也是好事情的呀!没有必要不断的编译第三方的jar和class文件呀 参数校验工具类:封装在一个公有方法里面 public class ValidateUtil { /**
精雕软件(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,不能为空字符串
写一个必传参数校验工具类
需要依赖: 1.(使用alibab的fastjson 把对象转成json的时候会自动去掉值为null的字段,所以用下面这个jackson依赖) 2.apache工具包 <dependency> <groupId>com.fasterxml.jackson.datatype</groupId> <artifactId>jackson-datatype-guava</artifactId
参数校验工具类BeanValidator
参数校验工具类
后端参数校验工具类
后端参数校验工具类 1、应用场景 1、Controller层判断传入参数是否符合规则,不符合规则直接返回错误状态码。 2、其他需要校验参数的地方。 2、工具类 public class CheckUtil { /** * 中文,字母,数字 _ - . 30位 */ static String regexFNDT = "^[a-zA-Z0-9\\u4e00-\\u9...
StringTools 字符串/参数校验工具类
本文介绍了StringTools工具类,用于字符串和参数校验。核心功能包括:检查对象非空字段(checkParam)、字符串处理(upperCaseFirstLetter/isEmpty)、安全相关(encodeByMD5/pathIsOk/escapeHtml)以及实用方法(getFileSuffix/getRandomString等)。该工具类采用反射机制实现参数校验,支持MD5加密、路径安全检测等常见需求,适用于输入验证、数据清洗等场景,具有易用性和扩展性特点。
运行时参数数据类型校验工具类
工作所需进行工具封装,在此记录 import { isObject, isFunction, isString, isNumber, isArray, isBoolean, } from '../xxx'; /** * 运行时参数数据类型校验工具类 * @param {Object} data 源数据 * @param {Object} rules 校验规则 * @example * const data = { // 数据源 * phone: 1591231234,
参数校验工具类,解析类上@NotNull等注解
【代码】参数校验工具类,解析类上@NotNull等注解。
参数、业务 校验工具类
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) {
java 多参数校验工具类
java 校验多个参数工具类 1、定义注解 2 编写工具类 3、使用步骤 ①需要校验的类字段上添加注解 如电话类tel中的phone字段: ②掉用
2240



被折叠的 条评论
为什么被折叠?



