说明
不同项目非空校验条件不同,添加动态参数校验注解,根据配置校验。
参考 通过实现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));
}
调用结果