- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有自定义 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/
我有自定义 validator 并在我的 Controller 中注册它 @Controller public class MyController { @InitBinder pro
我是一名优秀的程序员,十分优秀!