【问题标题】:Spring MVC Validator. encapsulate multiple validator initialization for multiple request mappingsSpring MVC 验证器。为多个请求映射封装多个验证器初始化
【发布时间】: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


【解决方案1】:

您可以将ControllerAdvice 添加到您的应用程序中,以全局注册您的验证器:

import org.springframework.validation.DataBinder;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.InitBinder;

@ControllerAdvice
public class ValidatorAdvice {

    @InitBinder
    public void initBinder(DataBinder dataBinder) {
       // dataBinder.addValidators();
    }
}

【讨论】:

  • 我得到无效的验证器目标
猜你喜欢
  • 1970-01-01
  • 2019-06-22
  • 2020-05-08
  • 1970-01-01
  • 1970-01-01
  • 2015-08-07
  • 2013-05-08
  • 2015-10-21
  • 2011-04-28
相关资源
最近更新 更多