繁体   English   中英

如何在 spring 启动应用程序中重用验证器 class?

[英]How to reuse validator class in spring boot app?

我目前正在为 Spring Boot 应用程序编写自定义验证器,其想法主要是根据其他验证进行一些验证。 例如,如果其他字段是 null,我希望一个字段为 @NotNull,但想法是使其更通用,以便可以更改此条件验证。 为此,我尝试使用已经存在的注释中的验证类,例如@NotNull 或@Size,但结果发现它们没有:

@Constraint(validatedBy = { })
public @interface NotNull {
}

验证后的这些大括号是什么意思? 如何获取此接口使用的 Validator?

如果您创建自己的约束注释,您应该在@Constraint中使用validatedBy属性定义您的验证器。

内置约束注释的验证器以编程方式在其构造函数中注册在ConstraintHelper class 中,因此大括号为空。 例如, ConstraintHelper构造函数中@NotNull注释的验证器注册如下所示:

putConstraint( tmpConstraints, NotNull.class, NotNullValidator.class );

如果您想查看 javax.validation.ConstraintValidator 的内置实现, javax.validation.ConstraintValidatororg.hibernate.validator.internal.constraintvalidators ZEFE90A8E604A7C847D8ZF0.BZ 或者,如果您使用的是 Intellij Idea:

右键单击ConstraintValidator的声明 -> Go To -> Implementation(s)

因此,要重用此验证器,您可以创建自定义注释并在其上放置内置注释:

@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
@NotNull
@NotEmpty
@Constraint(validatedBy = { })
public @interface NotNullAndNotEmpty {
    String message() default "some message";
    Class<?>[] groups() default {};
    Class<? extends Payload> [] payload() default {};
}

,或者您可以在自定义验证器中初始化一些内置验证器,并在您的 isValid() 方法中调用其isValid() isValid()方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM