当前位置: 首页 > 面试题库 >

我可以覆盖jsr-303验证注释吗

子车凌龙
2023-03-14
问题内容

我有如下测试:

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'}]

但是,我希望注释可以@Size被覆盖,并且不会出现警告。
有没有办法做到这一点?

编辑:我发现一个错误似乎与此有关,但我最终运行4.2.0,仍然得到上述行为。


问题答案:

实际上,JSR-303不支持覆盖验证注释。相反,子类中重写方法的注释将 累积 应用:从规范的3.3节开始:

约束声明可以放在接口上。对于给定的课程,
持有在超类以及接口上的约束声明是
由Bean验证提供程序评估。规则在
第3.4.5节。

约束声明的作用是累积的。 **约束已声明
将在超类getter上验证所有定义的约束
根据Java语言在getter的覆盖版本上
规范可见性规则。**


 类似资料:
  • 问题内容: 我刚刚开始测试JSR-303 Bean验证,并且想知道是否有可能。我们的应用程序中有一个用于所有String字段的默认正则表达式。如果我想使用bean验证来应用此功能,我想我需要在表单对象中注释每个字段。 一击是否可以将@Pattern应用于所有字符串(或某些字段)?我们正在WebLogic 10.3.4上使用Hibernate实现,并以JSF2.0为前端。验证应该独立于视图,因为我可

  • 我们正在开发REST服务,并希望使用JSR303进行输入数据验证,但这里的问题是所有模型对象都是从groovy DSL生成的,并将作为jars导入。因此,在对象字段之上编写JSR-303注释没有灵活性。 那么,有没有其他方法可以不用注释使用JSR-303,可以通过XML配置吗?或者在这种情况下,请提供任何验证建议。 谢啦

  • 我的bean中有两个字段 当字段key=“A”,“value”应该跟在其他“key”的特定Regex后面时,它可以是任何内容。 如何根据键定义此值验证。

  • 问题内容: 是否有可能在JSR 303-Jave Bean Validation中验证对象的集合,而该集合本身没有任何注释,但包含在其中的元素呢? 例如,由于第二个人的名字为空,这是否可能导致约束冲突: 问题答案: 是的,只需添加到集合中即可。 这是《 Hibernate验证程序参考》中的示例。 这是标准的JSR-303行为。参见规范的 3.1.3节。

  • 我使用Spring 3.2.2与Primeface 4.0和Hibernate 4.2。我在我的实体上有JSR303验证注释,并且我配置了Spring来在服务层验证它们——这很好。 但是我希望在调用服务之前启动JSF验证,但事实并非如此。我所做的所有研究都表明,我只需在类路径中添加一个验证程序,JSF2就会自动应用。 我已将建议的JAR添加到我的类路径中: 完整的依赖关系树可以在https://g

  • 我目前正在用Spring开发一个应用程序,使用Hibernate作为ORM。我知道,默认情况下,Hibernate在持久化或加载实体时都会使用JSR-303 Bean验证。由于此应用程序支持草稿(我希望在持久化后执行验证),因此必须将其添加到persistence.xml中: 模型实体代码: 我想知道如何传播bean验证,以便每当MyEntity实例被验证时,所有相关联的bar也被验证,而不必在验