gpt4 book ai didi

java - 了解 Spring MVC 中的 "globalValidator"

转载 作者:太空宇宙 更新时间:2023-11-04 12:01:22 25 4
gpt4 key购买 nike

我有自定义 validator 并在我的 Controller 中注册它

@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) { ... }

}

但我也想在其他 Controller 中注册,这样就能够编写 @Valid 和要验证的 Foo 对象。据我所知,我明白我可以使用 @ControllerAdviced 类在每个 Controller 上注册 validator ,或者使用

 <mvc:annotation-driven validator="globalValidator"/>

但是如何注册我的 validator ,Spring 如何理解我想要将哪个 validator 设为全局 validator ?扫描每个实现Validator类?我可以通过xml配置来实现吗?如何使用这种方法?

我不明白Spring的描述:

The alternative is to call setValidator(Validator) on the global WebBindingInitializer. This approach allows you to configure a Validator instance across all annotated controllers. This can be achieved by using the SpringMVC namespace:

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"/>

最佳答案

Validation section 上的文档非常清楚:

In Spring MVC you can configure it for use as a global Validator instance, to be used whenever an @Valid or @Validated controller method argument is encountered, and/or as a local Validator within a controller through an @InitBinder method. Global and local validator instances can be combined to provide composite validation

如果我在您的示例中正确理解了 FooValidator,您希望在每次验证时将其用作全局 validator ,因此将其定义为一个 bean 并将其注入(inject),就像您已经在 mvc:annotation-driven XML 条目中直接显示的那样。

在每个 Controller 之上,您可以通过 @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";
}
//..
}

关于java - 了解 Spring MVC 中的 "globalValidator",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40873898/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com