spring boot 自定义校验注解

来源:互联网 发布:h3c s5000 端口聚合 编辑:程序博客网 时间:2024/06/10 09:32

创建注解

import cn.wyj.validation.SpecificIntegerConstraintValidator;import javax.validation.Constraint;import javax.validation.Payload;import java.lang.annotation.Documented;import java.lang.annotation.Retention;import java.lang.annotation.Target;import static java.lang.annotation.ElementType.FIELD;import static java.lang.annotation.ElementType.METHOD;import static java.lang.annotation.RetentionPolicy.RUNTIME;@Target({METHOD, FIELD})@Retention(RUNTIME)@Documented// 指定注解的处理类@Constraint(validatedBy = {SpecificIntegerConstraintValidator.class})public @interface SpecificInteger {    int[] numbers();    String message() default "Match failed";    Class<?>[] groups() default {};    Class<? extends Payload>[] payload() default {};}

创建处理类

import cn.wyj.validation.constraints.SpecificInteger;import javax.validation.ConstraintValidator;import javax.validation.ConstraintValidatorContext;public class SpecificIntegerConstraintValidator implements ConstraintValidator<SpecificInteger, Integer> {    private int[] numbers;    private String msg;    @Override    public void initialize(SpecificInteger constraintAnnotation) {        this.numbers = constraintAnnotation.numbers();        this.msg = constraintAnnotation.message();    }    @Override    public boolean isValid(Integer value, ConstraintValidatorContext context) {        if (value == null) {            return true;        }        boolean flag = false;        for (int i = 0; i < numbers.length; i++) {            if (value == numbers[i]) {                flag = true;                break;            }        }        if (flag) {            return true;        }        // 构建错误消息        context.disableDefaultConstraintViolation();        ConstraintValidatorContext.ConstraintViolationBuilder builder =                context.buildConstraintViolationWithTemplate(msg);        builder.addConstraintViolation();        return false;    }}