import java.validation.*;
public class ValidateUtils{
private static Validator validator;
static{
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
validator = factory.getValidator();
}
}
自定义校验注解
自定义一个校验注解,重写校验方法;
@Target({ElementType.TYPE,ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validteBy = MyValidClass.class)
public @interface MyValidAnno{
Class<?>[] groups() default {};
String message() default "notice msg";
Class<? extends Payload>[] payload() default {};
}
重写校验方法的类需要实现 ConstraintValidator<MyValidAnno,Object>
public class MyValidClass implements ConstraintValidator<MyValidAnno,Object> {
private Class<?>[] groups;
@Override
public void initialize(MyValidAnno myValidAnno){
this.groups = myValidAnno.groups;
}
@Override
public boolean isValid(Object value,ConstraintValidatorContext context){
.....重写的校验代码逻辑
//我们注解上有一个message属性,当返回false时,默认的使用的就是message的提示信息,当我们不希望使用message默认的提示语时,想要通过校验时,提供更人性化的提示,我们可以通过下面的方式实现;
//禁用默认的message提示信息
context.disableDefaultConstraintViolation();
//
context.buildConstraintViolationWithTemplate("自定义的错误信息Str").addConstraintViolation();
return false or true ;
}
}