对请求报文进行校验,可通过配置sql新增删除校验

最近的需求:对请求报文(dto中嵌套着dto)进行校验,包含非空校验,枚举类校验,正则校验(yyyy-mm-dd)这种。

**参考文章(程序猿杨鲍)**思路写的很好哦

Spring AOP+反射实现自定义动态配置校验规则,让校验规则飞起来
涉及三张表
t_template_info
其中check_level 是优先级校验,若为必传字段也需要符合枚举类型,我们需要先校验有没有值,如果有值再去与枚举匹配。这时候非空校验的优先级为1,枚举校验的优先级为2。

template_id varchar(16) NOT NULL COMMENT ‘模板编号’,
template_desc varchar(64) DEFAULT NULL COMMENT ‘模板描述’,
template_status tinyint(4) NOT NULL DEFAULT1COMMENT ‘模板状态(0:不使用,1:使用),
check_level int(11) NOT NULL COMMENT ‘检查优先级’

t_template_rule_info
这里一个rule_id可以匹配多个template_id。
值为空,若字段类型为必传枚举类-(必传,枚举)-“不能为空”;
若字段类型为非必传枚举类(枚举类)-不报错。

rule_id varchar(16) NOT NULL COMMENT ‘规则编号’,
template_id varchar(16) NOT NULL COMMENT ‘模板编号’,
rule_express varchar(128) NOT NULL COMMENT ‘规则表达式’,
toast_msg varchar(128) NOT NULL COMMENT ‘提示信息’,
rule_status tinyint(4) NOT NULL DEFAULT1COMMENT ‘规则状态’

t_bean_rule_info
因为涉及到枚举类型校验,我这边新增了一个字段枚举类,存的值是xxxx.xxxx.xxxEnum路径

bean_id varchar(32) NOT NULL COMMENT ‘实体类编号’,
rule_id varchar(16) NOT NULL COMMENT ‘规则编号’,
field_name varchar(32) NOT NULL COMMENT ‘字段名’,
enum_name varchar(128) DEFAULT NULL COMMENT ‘枚举类’,
field_desc varchar(128) DEFAULT NULL COMMENT ‘字段描述’,
check_status tinyint(4) DEFAULT1COMMENT ‘是否校验’

原来文章写的很不错,我这边就加一个枚举类校验的方法。
CheckEngine.java其中有个枚举类是以|隔开的,所以有加特殊判断,我所有的枚举类都有getCode()这个方法,所以才能这么写哦。

public String dictionary(IcCheckRuleDTO roleModel) throws ClassNotFoundException, NoSuchMethodException {
        String[] values = null;
        if ("xxxxx".equals(roleModel.getFieldName())) {
            values = roleModel.getFieldValue().toString().split("\\|");
        } else {
            values = new String[]{roleModel.getFieldValue().toString()};
        }

        String enumName = roleModel.getEnumName();
        // 1.得到枚举类对象
        Class<?> clz = Class.forName(enumName);
        // 2.得到所有枚举常量
        Object[] objects = clz.getEnumConstants();
        Method getCode = clz.getMethod("getCode");
        // 得到所有枚举code
        List<String> enumCodeList = Arrays.stream(objects).map(a -> {
            try {
                return getCode.invoke(a).toString();
            } catch (IllegalAccessException | InvocationTargetException e) {
                return null;
            }
        }).collect(Collectors.toList());
        for (String value : values) {
            if (!enumCodeList.contains(value)) {
                return generateToastMsg(roleModel);
            }
        }
        return null;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值