簡體   English   中英

理解Spring MVC中的“globalValidator”

[英]Understanding “globalValidator” in Spring MVC

我有自定義驗證器,我在我的控制器中注冊它

@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類? 我可以用xml配置嗎? 如何使用這種方法?

我不明白Spring的描述:

另一種方法是在全局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中,您可以將其配置為用作全局Validator實例,在遇到 @Valid或@Validated控制器方法參數時使用和/或通過@InitBinder方法在控制器中作為本地Validator使用。 可以組合全局和本地驗證器實例以提供復合驗證

如果我在您的示例中正確理解了FooValidator,您希望在每次驗證時將其用作全局Validator,因此將其定義為bean並將其注入直接顯示在mvc:annotation-driven XML條目中,如您所示。

在每個控制器之上,您可以通過@InitBinder注釋進行自定義(僅在控制器負責的表單上應用)。

作為旁注,在@RequestMapping方法中接收POST請求,其中@Valid參數為:您可以在此之后擁有BindingResult條目以對路由等做出決策。在您的示例中:

@RequestMapping("/foo", method=RequestMethod.POST)
public String processFoo(@Valid Foo foo, BindingResult result) {

   if(result.hasErrors()) {
      return "go/that/way";
   }
   //..
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM