我正在尝试使用带有@Validated
的Spring验证程序验证我的表单。
但是,我很困惑为什么我需要在@InitBinder
中指定验证器。
以下是我从控制器获取的相关代码片段:
@InitBinder("organisationForm")
private void initBinder(WebDataBinder binder) {
binder.setValidator(new OrganisationFormValidator());
}
@RequestMapping(value = "/addOrganisation", method = RequestMethod.POST)
public String addOrganisationPost(@Validated @ModelAttribute("organisationForm") OrganisationForm organisationForm, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
return "configuration/addOrganisation";
}
这很好但我需要为每个请求指定一个@InitBinder
。
Spring有一种方法可以对所有转换器进行注册,如下所示:
@Override
public void addFormatters(FormatterRegistry formatterRegistry) {
ConversionServiceFactory.registerConverters(getConverters(),
formatterRegistry);
}
Spring中是否没有“验证服务”查看所有验证器并选择正确的验证服务,可能使用Spring supports
接口强制执行的Validator
方法:
public boolean supports(final Class<?> clazz) {
return OrganisationForm.class.isAssignableFrom(clazz);
}
在Spring中不存在这似乎很奇怪。我误解了什么吗?
答案 0 :(得分:2)
您可以使用@ControllerAdvice向init binders添加验证器,并且可以指定Model Attributes和ExceptionHandler。
如果要在整个控制器(或通过特定的控制器列表)中使用验证器,可以使用其属性为其指定控制器类。
@ControllerAdvice(assignableTypes = { Controller1.class, Controller2.class})