springboot 自定义校验注解,可校验传入值是否满足条件

java 复制代码
@Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER})
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = {FixedValueValidator.FixedValueValid.class})

public @interface FixedValueValidator {

    String message() default "FixedValue's value is invalid";

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

    Class<? extends Payload>[] payload() default {};

    String[] fixedValue();

    class FixedValueValid implements ConstraintValidator<FixedValueValidator, Object> {

        String[] fixedValue = null;

        @Override
        public void initialize(FixedValueValidator validData) {
            this.fixedValue = validData.fixedValue();
        }

        @Override
        public boolean isValid(Object value, ConstraintValidatorContext constraintContext) {
            if (fixedValue == null || fixedValue.length == 0) {
                return false;
            }

            if (value == null) {
                return true;
            }

            boolean flag = false;
            for (String str : fixedValue) {
                if (String.valueOf(value).equals(String.valueOf(str))) {
                    flag = true;
                    break;
                }
            }
            return flag;
        }
    }
}

使用方式:

java 复制代码
  @FixedValueValidator(fixedValue = {"0", "1", "2", "3", "4"}, message = "优先级类型有误")
  private Long priorityLevel;
java 复制代码
ValidatorUtils.validateEntity(object);

以下为校验工具类

java 复制代码
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import java.util.Set;

/**
 * @ClassName: ValidatorUtils
 * @Author: dujiayu
 * @Description:
 * @Date: 2022/10/27 14:29
 * @Version: 1.0
 */
public class ValidatorUtils {
    private static Validator validator;

    static {
        validator = Validation.buildDefaultValidatorFactory().getValidator();
    }

    /**
     * 校验对象
     *
     * @param object 待校验对象
     * @param groups 待校验的组
     * @throws ValidatorException 校验不通过,则报ValidatorException异常
     */
    public static void validateEntity(Object object, Class<?>... groups) throws ValidatorException {
        Set<ConstraintViolation<Object>> constraintViolations = validator.validate(object, groups);
        if (!constraintViolations.isEmpty()) {
            ConstraintViolation<Object> constraint = constraintViolations.iterator()
                    .next();
            throw new ValidatorException(constraint.getMessage());
        }
    }

    /**
     * 添加
     */
    public interface Insert {
    }

    /**
     * 修改
     */
    public interface Update {
    }
}
相关推荐
追逐时光者8 小时前
一套开源、美观、高性能的跨平台 .NET MAUI 控件库,助力轻松构建美观且功能丰富的应用程序!
后端·.net
码事漫谈9 小时前
重构的艺术:从‘屎山’恐惧到优雅掌控的理性之旅
后端
码事漫谈9 小时前
C++框架中基类修改导致兼容性问题的深度分析与总结
后端
华仔啊15 小时前
王者段位排行榜如何实现?Redis有序集合实战
java·redis·后端
豌豆花下猫15 小时前
Python 潮流周刊#120:新型 Python 类型检查器对比(摘要)
后端·python·ai
南方者15 小时前
当小学生的手写体也能识别出来,PP-OCRv5 稳了!
后端·图像识别
RoyLin16 小时前
TypeScript设计模式:解释器模式
前端·后端·typescript
易元17 小时前
模式组合应用-享元模式
后端·设计模式
对象存储与RustFS17 小时前
零基础小白手把手教程:用Docker和MinIO打造专属私有图床,并完美搭配PicGo
后端