【发布时间】:2014-03-17 11:08:58
【问题描述】:
我很难相信我是唯一一个想要这样做的人,但我找不到任何参考资料来帮助我克服障碍。使用 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 {
}
如果我将 name 放在大于 10 个字符的 Bar 或 Bang 的实例中,我会收到预期的验证错误。不过,假设我仍然希望 Bar 和 Bang 从抽象基类 Foo 派生,但我希望子类的 name 属性具有不同的验证。
如何注释 Bar 和 Bang,以便 Bar.name 的最大长度为 12 个字符,而 Bang.name 的最大长度为 8 个字符?
非常感谢, 抢
【问题讨论】:
-
我看到了。我在覆盖的 getter 方法上尝试了“累积”的东西,而在基类上没有验证。发生的事情是验证根本没有发生。我已经尝试在各个地方使用@Valid,但我仍然无法让验证器在被覆盖的 getter 上触发。我是否必须在基类上设置一个“@Size”验证器,然后在扩展类上进一步限制它?像基类上的 max=1000 和扩展上的 max=12 一样利用注释验证的“累积”性质?
-
重点是,由于这种累积性质,JSR303 注释无法覆盖。
-
我想我必须接受这个答案,即使我不喜欢它。 :-/ 谢谢,@gadget。
标签: java spring validation spring-mvc hibernate-validator