【问题标题】:How to extend a built-in Hibernate Validator ConstraintValidator如何扩展内置的 Hibernate Validator ConstraintValidator
【发布时间】:2015-08-14 06:35:12
【问题描述】:

现在我正在开发我的 spring+hibernate 应用程序。
我想覆盖@Min 注释的验证器并编写以下代码:

@Component
public class CustomMinValidator extends MinValidatorForNumber {

    public void initialize() {
        Min min = new Min() {

            @Override
            public String message() {
                return null;  //To change body of implemented methods use File | Settings | File Templates.
            }

            @Override
            public Class<?>[] groups() {
                return new Class<?>[0];
            }

            @Override
            public Class<? extends Payload>[] payload() {
                return null;
            }

            @Override
            public long value() {
                return 150;
            }

            @Override
            public Class<? extends Annotation> annotationType() {
                return null;
            }
        };
        super.initialize(min);
    }
}

但在调试中,我看到 CustomMinValidator#initialize 从不调用,而是 MinValidatorForNumber#initialize 调用。

如何正确覆盖标准验证器?

【问题讨论】:

    标签: java hibernate validation bean-validation hibernate-validator


    【解决方案1】:

    您必须通过约束映射文件“注册”您的自定义约束验证器 - http://beanvalidation.org/1.1/spec/#xml-mapping-constraintdefinition

    在您的情况下,您还需要设置include-existing-validators="true",以便约束验证器分辨率对于Numberss 是唯一的。

    【讨论】:

    • 我不明白xml文件的名称是什么以及放在哪里。
    • 你需要validation.xml(主要配置文件来配置/自定义)Bean Validation)。在 validation.xml 中添加一个约束映射节点 - &lt;constraint-mapping&gt;META-INF/validation/my-constraints-mapping.xml&lt;/constraint-mapping&gt; 指向一个遵循约束映射模式的 xml 文件。另见docs.jboss.org/hibernate/validator/5.1/reference/en-US/…。另请注意,不建议扩展 Hibernate Validator 内部类。他们可能会在没有通知的情况下更改。复制 impl 可能会更好。
    猜你喜欢
    • 2015-04-06
    • 2016-09-20
    • 1970-01-01
    • 2016-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多