【问题标题】:Validating custom validators depending on other validators present根据存在的其他验证器验证自定义验证器
【发布时间】:2015-03-03 07:08:41
【问题描述】:

在现在练习自定义休眠验证器之后,我想探索更多。众所周知,自定义的hibernate注解可以根据X的数据类型,由一个或多个ConstraintValidator<T extends Annotation, X>进行验证。

我想知道是否可以创建几个ConstraintValidator(用于@FooOne),这些@FooOne 将根据特定bean 类中的配对约束验证器(@FooTwo@FooThree)进行选择。例如:

@FooOne
@FooTwo
private String fooField;

@FooOne
@FooThree
private String anotherFooField;

【问题讨论】:

    标签: java hibernate bean-validation hibernate-validator


    【解决方案1】:

    不,你不能。这将违反“ConstraintValidator 解析算法”。另请参阅 Bean 验证规范 - http://beanvalidation.org/1.1/spec/#typevalidatorresolution

    如果同一类型有两个以上(最大程度特定的)约束验证器实现,则会引发异常。

    【讨论】:

    • 我明白了。然而,还有其他选择吗?
    • 这取决于您的用例。你想达到什么目标?
    • 基本上,我希望自定义注释从其验证器列表中调用一个ConstraintValidator,如果添加了另一个特定的自定义注释,则在其中选择选定的验证器。就像@FooOne 会为fooField 的情况调用FooOneFooTwoValidator 并为anotherField 调用FooOneFooTwoValidator
    • 当然,问题是您要解决什么用例。为什么要进行此条件约束验证器选择。另外,请记住约束的整个概念是它们是独立的。如果您的情况是可能的,那么很难确定实际发生了什么验证。如果您想组合约束,您可能对约束组合感兴趣,但同样,这取决于您要解决的用例。
    猜你喜欢
    • 2013-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-10
    • 1970-01-01
    • 2012-03-20
    相关资源
    最近更新 更多