Spring MVC和JSR 303 - 手动验证

Tom*_*ker 2 java spring-mvc bean-validation

我正在使用Spring MVC 3和JSR 303.我有一个表单支持对象,其中包含不同类型的bean.根据请求参数值,我将不得不选择一个bean进行验证和保存.我不能@Valid用于验证,因为要运行时才知道要验证的bean.

我能够向javax.validation.Validator控制器注入一个,但我不知道如何用它来验证bean并BindingResult/Error以"Spring方式" 存储任何错误.

initBinder由于请求映射,我需要在处理程序方法而不是方法中执行此操作.

[编辑]

我遇到的问题validate(Object, Errors)是它无法识别嵌套bean.要验证的bean是通过foo.getBar().getBean()访问的,其中foo是表单后备对象.当我这样做时validate(foo.getBar().getBean(), errors),我收到以下错误消息.

JSR-303 validated property 'property-name' does not have a corresponding accessor for Spring data binding
Run Code Online (Sandbox Code Playgroud)

以前有人做过这样的事吗?谢谢.

Aff*_*ffe 5

是的,你正在寻找的魔法课是 org.springframework.validation.beanvalidation.SpringValidatorAdapter

该类获取一个注入其中的javax.validation.Validator,并包含代码,顾名思义,将输出"调整"回熟悉的Errors对象.当你@Valid使用方法参数时,它是内部用于处理的内容.

您可以通过LocalValidatorFactoryBean在调度程序servlet中添加显式来直接获取它们.只需注入一个实例作为标准Spring Validator接口的实例,并像使用任何'pre jsr-303'弹簧验证提供程序一样使用它.