【问题标题】:Spring - mixing annotation and validator-based validationsSpring - 混合注释和基于验证器的验证
【发布时间】:2013-05-14 23:04:21
【问题描述】:

我遇到了以下问题,有一个带有一些与验证相关的注释的常规弹簧模型(我们称之为“A”)。接下来,有一个命令对象(定义一些字段的常规 POJO 类,其中一个是类型 A 的对象)。命令对象实现了Validator接口,使绑定和验证工作在控制器方法中。

问题是,如何在命令对象中使用注解配置的验证(假设它实现了 Validator 接口,因此它有 support() 和 validate() 方法)。

我想要实现的是对模型进行基本验证,这些验证可重复使用并与系统其他部分的一些较重的业务逻辑验证混合。

【问题讨论】:

    标签: java spring-mvc


    【解决方案1】:

    我也遇到了同样的问题。我想对“简单的事情”使用自动注释验证,然后将复杂的验证逻辑传递给我的自定义 spring Validator。但是每当我设置控制器验证器时,所有 hibernate 的验证都会停止工作,如本教程末尾所述:

    http://www.captaindebug.com/2011/07/applying-custom-spring-validator-to.html#.VQR0OI7F-gd

    当你需要做所有你的 控制器自己的验证,你不能或不想做 使用 Hibernate 的 JSR 303 参考实现 验证器。 由此,你会猜到你不能混合你自己的自定义 带有 Hibernate 的 JSR 303 验证器的 Spring 验证器。例如, 将内置注释添加到地址命令对象将 没有效果:

    您应该忘记旧式 Spring Validator 并删除“setInitBinder()”,如以下相关问题所述:

    Spring MVC validator annotation + custom validation

    您应该只依赖休眠验证和 JSR303。

    要向您的类(模型)添加复杂的验证,假设您要检查两个日期字段 - 使用类级别的自定义注释约束,如下面的链接中所述。

    https://docs.jboss.org/hibernate/validator/5.1/reference/en-US/html/validator-customconstraints.html#section-class-level-constraints

    希望这会有所帮助。

    最好的问候, 亚历山大

    【讨论】:

      【解决方案2】:

      看看这个可能对你有帮助 Using both JSR-303 and Traditional Bean Validation?。我已经给出了一个使用自定义注释对模型进行自定义验证的示例。

      【讨论】:

      • 是的,我已经看过链接(从您链接到的问题中接受)-blog.trifork.com/2009/08/04/… 之前,但是,我无法让它工作。使用的代码比当前的实现更旧,API 已更改。可能有新方法可以使这两种验证方法协同工作。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-25
      • 2011-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-17
      • 2012-06-27
      相关资源
      最近更新 更多