当前位置: 首页 > news >正文

自定义枚举类型检查

/*** 工单状态,使用字典:order_item_state*/
@CheckEnum(nullAble = true, enumType = OrderItemStateEnum.class)
private String workState;

注解类

package com.gdyunst.core.tool.validation;import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;/*** 校验是否是状态枚举中的项*/
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER, ElementType.TYPE_USE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Constraint(validatedBy = {CheckEnumValidation.class})
public @interface CheckEnum {String message() default "请输入字典中的状态类型";/*** 是否可以为空,true可以为空,当配置true并且传的值也是空,那就不做校验* @return*/boolean nullAble() default false;/*** 枚举类型* @return*/Class enumType();/*** 枚举中的方法名称,get方法,如:getType* @return*/String methodName() default "getType";Class<?>[] groups() default {};Class<? extends Payload>[] payload() default {};
}

配置类

package com.gdyunst.core.tool.validation;import cn.hutool.core.util.StrUtil;
import com.gdyunst.core.tool.util.EnumUtils;import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;/*** 参数必须是状态字典校验*/
public class CheckEnumValidation implements ConstraintValidator<CheckEnum, String> {/*** 获取配置中是否为空*/private Class enumType;private boolean nullAble;private String methodName;@Overridepublic void initialize(CheckEnum checkEnum) {enumType = checkEnum.enumType();nullAble = checkEnum.nullAble();methodName = checkEnum.methodName();}/*** 传递的字典类型参数值* @param enumValue* @param constraintValidatorContext* @return*/@Overridepublic boolean isValid(String enumValue, ConstraintValidatorContext constraintValidatorContext) {// 配置了允许为空并且该值也是空,那就不去校验格式if (nullAble && StrUtil.isBlank(enumValue)) {return true;}if(StrUtil.isBlank(enumValue)){constraintValidatorContext.disableDefaultConstraintViolation();constraintValidatorContext.buildConstraintViolationWithTemplate("请输入字典字段参数").addConstraintViolation();return false;}if (StrUtil.isBlank(methodName)) {constraintValidatorContext.disableDefaultConstraintViolation();constraintValidatorContext.buildConstraintViolationWithTemplate("枚举中的字段必须配置").addConstraintViolation();return false;}if (enumType == null) {constraintValidatorContext.disableDefaultConstraintViolation();constraintValidatorContext.buildConstraintViolationWithTemplate("枚举对象必须配置").addConstraintViolation();return false;}Object stateEnum = EnumUtils.getEnumByLambda(enumValue, enumType, methodName);if(stateEnum == null) {constraintValidatorContext.disableDefaultConstraintViolation();constraintValidatorContext.buildConstraintViolationWithTemplate(String.format("请输入系统字典: %s 中的枚举值", enumType.getSimpleName())).addConstraintViolation();return false;}return true;}
}

http://www.lryc.cn/news/416799.html

相关文章:

  • 探索四川财谷通抖音小店:安全与信赖的购物新体验
  • systemd-manage系统服务图形化管理工具使用教程
  • 移除元素(LeetCode)
  • 代码随想录27期|Python|Day38|509斐波那契|738.爬楼梯|746.746. 使用最小花费爬楼梯
  • windows docker容器部署前端项目
  • 科普文:微服务之全文检索ElasticSearch 集群的搭建
  • QtObject是干什么的?
  • 锐捷RCNA | 远程登录与路由技术
  • 实现Vue-tiny-diff算法
  • 正则表达式测试工具
  • Github 2024-08-02 开源项目日报 Top9
  • 重生之我 学习【数据结构之顺序表(SeqList)】
  • 前端day4-表单标签
  • vue3-print-nb 表格打印分页,第一页有空白的情况出现解决方法(两种:一种原生,一种基于element表格)
  • 搜维尔科技:借助 Xsens中的远程人体录制功能,可以在任何位置以无限量同时捕捉无限数量演员的身体动作
  • 2024/08 近期关于AI的阅读和理解[笔记]
  • SmartEDA:解锁设计新境界,从工具到灵感的飞跃之旅!
  • 解决Minizip压缩后解压时的头部错误问题
  • 数据库表水平分割和垂直分割?
  • Linux源码阅读笔记18-插入模型及删除模块操作
  • 力扣面试经典算法150题:移除元素
  • java关于前端传布尔值后端接收一直为false问题
  • 工具学习_CVE Binary Tool
  • 智观察 | 行业赛道里的AI大模型
  • linux 进程 inode 信息获取
  • 计算机网络-网络层
  • 机器学习:识别AI,GraphRAG,LoRA,线性变换,特征
  • 阿里云SMS服务C++ SDK编译及调试关键点记录
  • Flutter 正在迁移到 Swift Package Manager ,未来会弃用 CocoaPods 吗?
  • PDF——分割pdf的10个工具