Spring MVC验证继承的类


问题内容

我很难相信我是唯一想要这样做的人,但是我找不到任何帮助我克服障碍的参考。使用Spring MVC和基于注释的验证(我正在使用框架4.0和Java
1.7),请考虑一个简单的类层次结构,如下所示:

abstract class Foo {

    @Size(max=10, message = "The name has to be 10 characters or less.")
    private String name;

    public String getName() {
        return this.name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

class Bar extends Foo {

}

class Bang extends Foo {

}

如果我在Bar或Bang的实例中放置的 名称
超过10个字符,则会收到预期的验证错误。但是,让我们假设,我仍然希望Bar和Bang是从抽象基类Foo派生的,但是我希望子类的name属性具有 不同的
验证。

如何注释Bar和Bang,以便 Bar.name 的最大长度为12个字符,而 Bang.name 的最大长度为8个字符?

非常感谢,罗伯


问题答案:

简短的答案是,在Bean验证中不可能禁用超类中的约束。这里有一个功能请求https://hibernate.atlassian.net/browse/BVAL-256,建议引入@OverrideConstraint或@IgnoreInheritedConstraint类型的注释。截至目前,这是不可能的。

另请参见http://lists.jboss.org/pipermail/beanvalidation-
dev/2012-January/000128.html
https://hibernate.atlassian.net/browse/HV-548