我遇到了问题,有一个常规弹簧模型(我们称之为“A”),带有一些与验证相关的注释。接下来,有一个命令对象(定义一些字段的常规POJO类,其中一个是A类型的对象)。命令对象实现Validator接口,以便在控制器方法中进行绑定和验证。
问题是,如何在命令对象中使用注释配置的验证(假设它实现了Validator接口,因此它具有supports()和validate()方法)。
我正在努力实现的是对模型进行基本验证,该模型可以重复使用,并与系统其他部分中较重的业务逻辑验证相结合。
答案 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。
要向类(模型)添加复杂验证,请说要检查两个日期字段 - 在类级别使用自定义注释约束,如下面的链接所述。
希望这有帮助。
最诚挚的问候, 亚历山大
答案 1 :(得分:0)
一旦看到这可能对你有所帮助 Using both JSR-303 and Traditional Bean Validation?。在那里,我给出了一个使用自定义注释对模型进行自定义验证的示例。