Spring validation自定义校验注解

如何自定义Spring validation注解

在工作中我们常常使用spring validation来进行参数的校验工作。例如使用NotNull,NotBlank等注解,但是实际工作中
往往内置注解满足不了业务需求。所以我们可以通过自己来实现自定义注解满足实际的业务需求

自定义解析器

public class OpenBankDateCheck implements ConstraintValidator {

    @Override
    public void initialize(OpenBankDate openBankDate) {
        //初始化可以不用做什么事情
    }

    @Override
    public boolean isValid(LocalDate localDate, ConstraintValidatorContext constraintValidatorContext) {
        if(localDate == null){
            return false;
        }
        //开户用户必须小于十八岁
        if(localDate.plusYears(18).compareTo(LocalDate.now())<=0){
            return true;
        }
        return false;
    }
}
  • 首先需要实现ConstraintValidator接口,这里的泛型,第一个是自定义注解,第二个是注解修饰的属性类型,然后我们需要重写isValid方法,如果返回true,则表示验证通过,如果返回false,表示验证失败并抛出MethodArgumentNotValidException。--- 这里的传入的第一个参数就是需要验证的字段值。既然已经拿到验证字段了,我们便可以使用正则表达式来进行我们业务逻辑的校验。
    • 这里自定义注解需要使用@Constraint来进行修饰,validatedBy就是我们上方写的注解校验器。
    • 这里需要注意一定要加上groups属性来提供分组校验功能,否则valid校验的时候会抛出异常提示没有groups属性。

自定义注解

@Retention(RetentionPolicy.RUNTIME)
@Documented
@Target(value = ElementType.FIELD)
@Constraint(validatedBy = OpenBankDateCheck.class)
public @interface OpenBankDate {

    String message() default "Our applicants have to be at least 18 years old at the date of application";


    Class[] groups() default {};

    Class[] payload() default {};


}

运行效果如下:

运行效果.png

你可能感兴趣的:(Spring validation自定义校验注解)