理解Spring MVC中的“globalValidator”
我有自定义的验证器,我在我的控制器中注册它
@Controller
public class MyController {
@InitBinder
protected void initBinder(WebDataBinder binder) {
binder.setValidator(new FooValidator());
}
@RequestMapping("/foo", method=RequestMethod.POST)
public void processFoo(@Valid Foo foo) { ... }
}
但我也想在其他控制器中注册,以便能够编写@Valid和Foo对象进行验证。 从我看到的我明白我可以使用@ControllerAdviced类来在每个控制器上注册验证器,或者使用
<mvc:annotation-driven validator="globalValidator"/>
但是,如何注册我的验证器,Spring如何理解我想要创建一个全球化的Validator? 扫描每个实现的Validator类? 我可以用xml配置吗? 如何使用这种方法?
我不明白春天的描述:
另一种方法是在全局WebBindingInitializer中调用setValidator(Validator)。 这种方法允许您在所有带注释的控制器上配置Validator实例。 这可以通过使用SpringMVC命名空间来实现:
xmlns =“http://www.springframework.org/schema/beans”xmlns:mvc =“http://www.springframework.org/schema/mvc”xmlns:xsi =“http://www.w3.org / 2001 / XMLSchema-instance“xsi:schemaLocation =”http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xss http:// www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd“>
<mvc:annotation-driven validator="globalValidator"/>
该文档在验证部分非常明确:
在Spring MVC中,您可以将其配置为用作全局验证程序实例,以便在遇到 @Valid或@Validated控制器方法参数时使用该实例, 并且/或者通过@InitBinder方法将其用作控制器内的本地验证 程序 。 全局和本地验证器实例可以组合起来提供复合验证
如果我在你的例子中正确理解了你希望在每次验证时使用它的FooValidator作为全局验证器,所以将它定义为一个bean并将它注入,直接显示在mvc:annotation-driven
XML条目中,就像你已经显示的那样。
除此之外,您可以通过@InitBinder
批注自定义(仅在该Controller负责的表单上应用顶层)。
请注意,在接收POST请求的@RequestMapping
方法中,您的@Valid
参数是:您可以在此之后拥有一个BindingResult
条目,以对路线做出决定等。在您的示例中:
@RequestMapping("/foo", method=RequestMethod.POST)
public String processFoo(@Valid Foo foo, BindingResult result) {
if(result.hasErrors()) {
return "go/that/way";
}
//..
}
链接地址: http://www.djcxy.com/p/39075.html