Spring validation自定义校验注解

如何自定义Spring validation注解

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

自定义解析器

public class OpenBankDateCheck implements ConstraintValidator<OpenBankDate, LocalDate> {

    @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<? extends Payload>[] payload() default {};


}

运行效果如下:

运行效果.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容