如何在 spring 启动应用程序中重用验证器 class?
How to reuse validator class in spring boot app?
我目前正在为 Spring 启动应用程序编写自定义验证程序,其想法主要是根据其他验证进行一些验证。例如,如果其他字段为 null,我希望一个字段为 @NotNull,但我的想法是使其更通用,以便可以更改此条件验证。
为此,我尝试使用注释中的验证 类,这些注释已经存在,例如 @NotNull 或 @Size,但事实证明它们没有:
@Constraint(validatedBy = { })
public @interface NotNull {
}
validatedBy 后这些花括号是什么意思?如何获取该接口使用的Validator?
如果您创建自己的约束注释,则应使用 validatedBy
属性在 @Constraint
中定义验证器。
built-in constraint-annotations 的验证器在其构造函数的 ConstraintHelper
class 中注册,因此大括号为空。例如,ConstraintHelper
构造函数中 @NotNull
注解的验证器注册看起来是这样的:
putConstraint( tmpConstraints, NotNull.class, NotNullValidator.class );
如果您想查看 javax.validation.ConstraintValidator
的 built-in 实现,请转到 org.hibernate.validator.internal.constraintvalidators
包。或者,如果您使用的是 Intellij Idea:
Right click on declaration of ConstraintValidator
-> Go To -> Implementation(s)
因此,要重用此验证器,您可以创建自定义注释并在其上放置 built-in 个注释:
@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 {};
}
,或者您可以在您的自定义验证器中初始化一些 built-in 验证器,然后在您的 isValid()
方法中调用它的 isValid()
方法。
我目前正在为 Spring 启动应用程序编写自定义验证程序,其想法主要是根据其他验证进行一些验证。例如,如果其他字段为 null,我希望一个字段为 @NotNull,但我的想法是使其更通用,以便可以更改此条件验证。 为此,我尝试使用注释中的验证 类,这些注释已经存在,例如 @NotNull 或 @Size,但事实证明它们没有:
@Constraint(validatedBy = { })
public @interface NotNull {
}
validatedBy 后这些花括号是什么意思?如何获取该接口使用的Validator?
如果您创建自己的约束注释,则应使用 validatedBy
属性在 @Constraint
中定义验证器。
built-in constraint-annotations 的验证器在其构造函数的 ConstraintHelper
class 中注册,因此大括号为空。例如,ConstraintHelper
构造函数中 @NotNull
注解的验证器注册看起来是这样的:
putConstraint( tmpConstraints, NotNull.class, NotNullValidator.class );
如果您想查看 javax.validation.ConstraintValidator
的 built-in 实现,请转到 org.hibernate.validator.internal.constraintvalidators
包。或者,如果您使用的是 Intellij Idea:
Right click on declaration of
ConstraintValidator
-> Go To -> Implementation(s)
因此,要重用此验证器,您可以创建自定义注释并在其上放置 built-in 个注释:
@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 {};
}
,或者您可以在您的自定义验证器中初始化一些 built-in 验证器,然后在您的 isValid()
方法中调用它的 isValid()
方法。