Spring MVC 验证器。为多个请求映射封装多个验证器初始化
Spring MVC Validator. encapsulate multiple validator initialization for multiple request mappings
我有一些控制器有多个方法,每个方法都有不同的 @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
方法,那也足够了。
您可以在您的应用程序中添加一个 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();
}
}
我有一些控制器有多个方法,每个方法都有不同的 @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
方法,那也足够了。
您可以在您的应用程序中添加一个 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();
}
}