动态参数校验注解(非空)

说明

不同项目非空校验条件不同,添加动态参数校验注解,根据配置校验。
参考 通过实现ConstraintValidator完成自定义校验注解

配置表

CREATE TABLE `sys_field_function` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',
  `field_code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '字段编码',
  `field_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '字段名称',
  `is_fill` tinyint(1) DEFAULT NULL COMMENT '是否必填 0 非必填 1 必填',
  `is_show` tinyint(1) DEFAULT NULL COMMENT '是否展示 0 隐藏 1 显示',
  `form_code` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '表单编码',
  `table_name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '关联表',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT '是否删除 0 未删除 1 删除',
  `tenant_id` int NOT NULL DEFAULT '0' COMMENT '所属租户',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=386 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='表单字段配置表';

逻辑处理

SCDynamicNotNullValidator 动态判断是否为null校验类

public class SCDynamicNotNullValidator implements ConstraintValidator<SCDynamicNotNull, Object> {
    SysFieldFunction sysFieldFunction = new SysFieldFunction();

    @Autowired
    RemoteSysFieldFunctionService sysFieldFunctionService;

    @Override
    public void initialize(SCDynamicNotNull constraintAnnotation) {
        sysFieldFunction.setFieldCode(constraintAnnotation.fieldCode());
        sysFieldFunction.setFormCode(constraintAnnotation.formCode());
    }

    /**
     * @param value                      字段值
     * @param constraintValidatorContext
     * @return true:不报错,false:报错
     */
    @Override
    public boolean isValid(Object value, ConstraintValidatorContext constraintValidatorContext) {

        // 字段为null
        if (ObjectUtil.isEmpty(value)) {
            R<Boolean> r = sysFieldFunctionService.notNull(sysFieldFunction);
            // 配置为必填
            if (r != null && r.getCode() == CommonConstants.SUCCESS && r.getData()) {
                return false;
            }
        }
        return true;
    }
}

使用示例

添加@SCDynamicNotNull注解 ,参数 formCode 对应数据库 form_code 字段,参数 fieldCode 对应数据库 field_code 字段。

	/**
     * 姓名
     */
    @ApiModelProperty(value = "姓名")
    @SCDynamicNotNull(formCode="InfoVisitor",fieldCode = "username",message = "姓名不能为空")
    private String username;

添加@Valid开启注解

   /**
     * @description: 新增
     * @author: chengdongdong
     * @time: 2021/1/5 16:35
     */
    @ApiOperation(value = "新增(PC)")
    @PostMapping("/add")
    @Idempotent(key="#infoVisitorDTO.username", expireTime = 10, info = "提交过快,稍后重试", delKey = true)
    public R addVisitor(@RequestBody @Valid InfoVisitorDTO infoVisitorDTO, HttpServletRequest request) {
        if (StringUtils.isEmpty(infoVisitorDTO.getCommunityCode())) {
            String communityCode = RequestUtil.getCommunityCode(request);
            PreCheckUtil.isFalse(StringUtils.isEmpty(communityCode), "小区信息为空");
            infoVisitorDTO.setCommunityCode(communityCode);
        }
        return R.ok(infoVisitorService.addVisitor(infoVisitorDTO));
    }

调用结果

img

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值