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 {
    }
}
相关推荐
WX-bisheyuange1 小时前
基于Spring Boot的民宿预定系统的设计与实现
java·spring boot·后端·毕业设计
码界奇点1 小时前
Java设计模式精讲从基础到实战的常见模式解析
java·开发语言·设计模式·java-ee·软件工程
卷福同学2 小时前
【AI编程】用Codebuddy+lighthouse开发AI年龄模拟网站
javascript·后端
5***79002 小时前
后端API设计趋势,GraphQL与REST对比
后端·graphql
桜吹雪2 小时前
手搓一个简易Agent
前端·人工智能·后端
William_cl2 小时前
【ASP.NET进阶】Controller层核心:Action方法全解析,从基础到避坑
后端·asp.net
q***9443 小时前
springboot接入deepseek深度求索 java
java·spring boot·后端
诗9趁年华3 小时前
深入分析线程池
java·jvm·算法
百***06013 小时前
SpringBoot的@Scheduled和@Schedules有什么区别
java·spring boot·spring
喵了几个咪3 小时前
使用Bazel构建你的Kratos微服务
java·运维·微服务