自定义注解校验List集合数据

实现功能:自定义注解实现对信息封装类中的List集合中的元素信息校验,并支持通过注解属性指定是否允许集合为空。

自定义注解
@Target(FIELD)
@Retention(RUNTIME)
@Constraint(validatedBy = StringListValidator.class)
public @interface StringList {
    // 检验失败时的错误提示信息
    String message() default "字符串格式错误";

    // 集合为空时的错误提示信息
    String emptyMessage() default "集合不能为空";

    // 校验规则,支持正则表达式
    String regexp();

    // 集合是否可以为空,默认可以为空
    boolean allowEmpty() default true;

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};
}
自定义注解解析器
public class StringListValidator implements ConstraintValidator<StringList, List<String>> {

    private String regexp = "";

    private boolean allowEmpty;

    private String emptyMessage;

    /**
     * 初始化方法
     * @param constraintAnnotation
     */
    @Override
    public void initialize(StringList constraintAnnotation) {
        this.regexp = constraintAnnotation.regexp();
        this.emptyMessage = constraintAnnotation.emptyMessage();
        this.allowEmpty = constraintAnnotation.allowEmpty();
    }

    /**
     * 校验的方法
     * @param list
     * @param context
     * @return
     */
    @Override
    public boolean isValid(List<String> list, ConstraintValidatorContext context) {
        if(CollectionUtils.isEmpty(list)) {
            if(!allowEmpty) {
               // 必须禁用,不然返回的message信息会在message和emptyMessage之间切换
               context.disableDefaultConstraintViolation(); 			
                context
                   .buildConstraintViolationWithTemplate(emptyMessage)
                   .addConstraintViolation();
            }
            return allowEmpty;
        }
        for(String str : list) {
            if(!str.matches(regexp)) {
                return false;
            }
        }
        return true;
    }
}
在封装类中使用注解
/**
 * 功能描述:删除学生信息的参数封装类
 */
@Data
public class StudentDeleteReq {
    /**
     * 学生id集合
     * regexp: ids集合中元素校验的正则表达式,会对集合中的每个元素都进行正则表达式校验
     * allowEmpty:是否允许集合为空,默认允许为空,false表示不允许集合为空
     * message:ids中元素格式检验失败时的提示信息
     * emptyMessage:ids集合为空时的提示信息
     */
    @StringList(regexp = "^[0-9]{1,20}$", allowEmpty = false, message = "id格式错误", emptyMessage = "id不能为空")
    private List<String> ids;
}
在Controller中添加检验注解
/**
     * 删除学生信息,支持单个删除和批量删除
     *
     * @param deleteReq 信息封装类
     * @return 操作结果
     */
@PostMapping("/delete")
public Result delete(@Valid @RequestBody StudentDeleteReq deleteReq) {
    // 业务代码
    。。。。
}
测试

集合为空时的校验错误信息:

在这里插入图片描述

集合中元素格式错误时的错误信息:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值