我有一个Spring webapplication,它使用hibernate验证器进行验证。我有一个位于不同项目中的约束注释。我需要在我的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 {};
}
谢谢!
答案 0 :(得分:4)
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>
即将推出的5.2版本提供了更多方法,例如使用服务加载器或实现ConstraintDefinitionContributor
。请参阅:Providing constraint definitions