如果@Constraint(由= {}验证),Hibernate验证器验证约束

时间:2014-10-24 08:55:02

标签: java spring-mvc constraints hibernate-validator

我有一个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 {};
}

谢谢!

1 个答案:

答案 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>

请参阅:Configuring via XML

即将推出的5.2版本提供了更多方法,例如使用服务加载器或实现ConstraintDefinitionContributor。请参阅:Providing constraint definitions