【发布时间】:2015-11-09 19:27:04
【问题描述】:
我有一些控制器有多个方法,每个都有不同的@RequestBody 域对象,有自己的验证器
@RestController
public class MyController {
@Autowired
private Validator BeanOneValidator;
@Autowired
private Validator BeanTwoValidator;
@Autowired
private Validator BeanThreeValidator;
@InitBinder("BeanOne")
private void initBeanOneBinder(WebDataBinder binder) {
binder.setValidator(beanOneValidator));
}
@InitBinder("BeanTwo")
private void initBeanTwoBinder(WebDataBinder binder) {
binder.setValidator(beanTwoValidator));
}
@InitBinder("BeanThree")
private void initBeanThreeBinder(WebDataBinder binder) {
binder.setValidator(beanThreeValidator));
}
@RequestMapping(...)
public requestWithBeanOne(@RequestBody @Valid BeanOne){...}
@RequestMapping(...)
public requestWithBeanTwo(@RequestBody @Valid BeanTwo){...}
@RequestMapping(...)
public requestWithBeanThree(@RequestBody @Valid BeanThree){...}
}
有没有办法像这里一样为控制器注册多个绑定器,而无需声明多个 @InitBinder 注释方法?
这样做是行不通的:
@InitBinder({"BeanOne","BeanTwo","BeanThree"})
private void initBeanOneBinder(WebDataBinder binder) {
binder.addValidators(beanOneValidator, beanTwoValidator, beanThreeValidator));
}
如果有一种方法可以在全局范围内注册验证器,而无需将显式 @InitBinder 方法添加到控制器也足够了。
【问题讨论】:
-
您为什么要以这种方式(通过 InitBinder)验证您的 bean?
标签: spring validation spring-mvc-initbinders