创建注解
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;
}
}