繁体   English   中英

春天@Validated和@InitBinder

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM