【问题标题】:Hibernate validator to validate constraints if @Constraint(validated by = {})如果 @Constraint(validated by = {}) Hibernate 验证器来验证约束
【发布时间】:2014-10-24 08:55:02
【问题描述】:

我有一个使用休眠验证器进行验证的 Spring Web 应用程序。我有位于不同项目中的约束注释。我需要在我的 spring 项目中为这些约束设置验证器,因为我需要一些服务来执行验证。所以情况是:我不能将我的约束验证器放在 @Constraint(validatedBy = MyConstraintValidator.class) 因为验证器在不同的项目中,我不能添加依赖,因为这会创建一个循环依赖,这不是我们的方式想要它。 我注意到 javax.constraints 没有指定验证器,它只是 @Constraint(validatedBy= {})。 但是hibernate验证器仍然知道如何验证它们。 有没有办法告诉我的休眠验证器如何验证我的约束而不在我的约束中指定约束验证器?

我希望能够验证这个约束:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
@Constraint(validatedBy = {})
public @interface OneOf {

    String message() default "{OneOf}";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};
}

谢谢!

【问题讨论】:

    标签: java spring-mvc constraints hibernate-validator


    【解决方案1】:

    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

    【讨论】:

    • 5.2 的第一个 Alpha 现已发布,它还提供了对自定义 ConstraintDefinitionContributors 的支持。
    • 我会接受这个虽然无法尝试..由于某种原因validation.xml给出解析异常..我必须使用4.3版本
    猜你喜欢
    • 2017-04-14
    • 2014-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-27
    • 2010-09-22
    • 2015-02-03
    相关资源
    最近更新 更多