Spring - 混合注释和基于验证器的验证

时间:2013-05-20 11:38:15

标签: java spring-mvc

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

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

我正在努力实现的是对模型进行基本验证,该模型可以重复使用,并与系统其他部分中较重的业务逻辑验证相结合。

2 个答案:

答案 0 :(得分:7)

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

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

  

当你需要做所有的时候,应该使用这种技术   控制器自己验证,你不能或不想做   使用Hibernate的JSR 303参考实现   验证器。 从这里,你会猜测你不能混合你自己的习惯   使用Hibernate的JSR 303验证器的Spring验证器。例如,   将内置注释添加到Address命令对象中   没有效果:

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

Spring MVC validator annotation + custom validation

然后你应该只依赖于hibernate验证和JSR303。

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

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

希望这有帮助。

最诚挚的问候, 亚历山大

答案 1 :(得分:0)

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