我可以覆盖 jsr-303 验证注释吗
我有一个如下所示的测试:
public class TestSizeAnnotation
{
public static void main(String[] args)
{
System.out.println(Validation.buildDefaultValidatorFactory().getValidator().validate(new C()));
}
public static class P
{
private List<String> lst = newArrayList("AA");
@Size(max=0, message="P")
public List<String> getLst()
{
return lst;
}
public void setLst(List<String> lst)
{
this.lst = lst;
}
}
public static class C extends P
{
@Override
@Size(max=5, message="C")
public List<String> getLst()
{
return super.getLst();
}
}
}
输出如下:[ConstraintViolationImpl{interpolatedMessage='P', propertyPath=lst, rootBeanClass=class com....validator.TestSizeAnnotation$C, messageTemplate='P'}]
但是,我预计注释可以 < code>@Size 被覆盖,并且不会出现警告。
有办法实现吗?
编辑:我发现一个 bug 似乎与此相关,但我运行 4.2.0 Final并仍然得到上述行为。
I have a test like below:
public class TestSizeAnnotation
{
public static void main(String[] args)
{
System.out.println(Validation.buildDefaultValidatorFactory().getValidator().validate(new C()));
}
public static class P
{
private List<String> lst = newArrayList("AA");
@Size(max=0, message="P")
public List<String> getLst()
{
return lst;
}
public void setLst(List<String> lst)
{
this.lst = lst;
}
}
public static class C extends P
{
@Override
@Size(max=5, message="C")
public List<String> getLst()
{
return super.getLst();
}
}
}
with the following output:[ConstraintViolationImpl{interpolatedMessage='P', propertyPath=lst, rootBeanClass=class com....validator.TestSizeAnnotation$C, messageTemplate='P'}]
However, I expected that the annotation can @Size
be overridden, and no warning will appear.
Is there a way to accomplish that?
EDIT: I found a bug seems related to that, but I run 4.2.0 final and still get the above behavior.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
JSR-303 实际上不支持覆盖验证注释。相反,子类中重写方法的注释将被累积应用:来自规范的第 3.3 节:
Overriding validation annotations is actually not supported for JSR-303. Instead annotations on overridden methods in the subclass will be applied cumulatively: From section 3.3 of the specification:
您可以通过 xml 配置来验证注释配置的验证:
http://docs.jboss.org/hibernate/validator/4.2/reference/en-US/html_single/#validator-xmlconfiguration
在您的情况下,如果您在validation.xml 文件中为 getList() 方法声明不同的验证(或不验证),它将覆盖
@Size
注释。You can ovveride an annotation configured validation via xml configuration:
http://docs.jboss.org/hibernate/validator/4.2/reference/en-US/html_single/#validator-xmlconfiguration
In your case, if you declare a different validation (or no validation) for the getList() methid in the validation.xml file, it will override the
@Size
annotation.只是为了记录,我找到了解决我的问题的方法:
Just for the records, I have found a bypass for my problem: