如果@Constraint(通过= {}验证),则使用Hibernate验证程序来验证约束
问题内容:
我有一个使用hibernate验证器进行验证的Spring
Web应用程序。我有位于不同项目中的约束注释。在我的spring项目中,我需要针对这些约束的验证器,因为我需要一些服务来执行验证。这样的情况是:我不能将约束验证器放在@Constraint(validatedBy
=
MyConstraintValidator.class)中,因为验证器在另一个项目中,我无法添加依赖项,因为这会创建循环依赖项,而这不是我们的方式想要它。我注意到javax.constraints没有指定验证器,它只是@Constraint(validatedBy
= {})。但是hibernate验证器仍然知道如何验证它们。有没有办法告诉我的hibernate验证器如何验证约束,而不必在约束中指定constaint-validators?
我希望能够验证此约束:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
@Constraint(validatedBy = {})
public @interface OneOf {
String message() default "{OneOf}";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
谢谢!
问题答案:
将javax.validation.constraints
验证器留给实现。Hibernate为这些约束提供验证器,并在引导时注册它们。
您可以通过XML设置验证器,而无需使用@Constraint(validatedBy = { })
。但是,这通常用于添加/替换您自己提供的验证器。我不确定它会如何帮助您,因为您仍然需要引用约束验证器。
使用XML约束定义的示例:
<constraint-definition annotation="org.mycompany.CheckCase">
<validated-by include-existing-validators="false">
<value>org.mycompany.CheckCaseValidator</value>
</validated-by>
</constraint-definition>
请参阅:通过XML配置
即将发布的5.2版本提供了更多方式,例如使用服务加载程序或实现ConstraintDefinitionContributor
。请参阅:提供约束定义