[英]Spring @Validated and @InitBinder
我正在尝试使用带有@Validated
的Spring验证器来验证我的表单。
但是,我很困惑为什么需要在@InitBinder
指定Validator。
这是我与控制器相关的代码段:
@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 Validator
接口强制执行的supports
方法:
public boolean supports(final Class<?> clazz) {
return OrganisationForm.class.isAssignableFrom(clazz);
}
似乎很奇怪,这在春天并不存在。 我误会了吗?
您可以使用@ControllerAdvice将验证器添加到init绑定器中,并且可以指定模型属性和ExceptionHandler。
如果要在整个控制器(或整个控制器的特定列表)中使用验证器,则可以使用其属性指定控制器类。
@ControllerAdvice(assignableTypes = { Controller1.class, Controller2.class})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.