Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring@Validated和@InitBinder_Java_Spring_Validation_Spring Mvc - Fatal编程技术网

Java Spring@Validated和@InitBinder

Java Spring@Validated和@InitBinder,java,spring,validation,spring-mvc,Java,Spring,Validation,Spring Mvc,我正在尝试使用Spring验证器验证我的表单,使用@Validated 但是,我不明白为什么需要在@InitBinder中指定验证器 以下是控制器中的相关代码片段: @InitBinder("organisationForm") private void initBinder(WebDataBinder binder) { binder.setValidator(new OrganisationFormValidator()); } @RequestMapping(value = "/

我正在尝试使用Spring验证器验证我的表单,使用
@Validated

但是,我不明白为什么需要在
@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
方法:

public boolean supports(final Class<?> clazz) {
    return OrganisationForm.class.isAssignableFrom(clazz);
}
公共布尔支持(最终类clazz){
返回组织形式。类别。可签名自(clazz);
}
看起来很奇怪,春天不存在这种情况。我误解了什么吗?

您可以使用它将验证器添加到init绑定中,并可以指定模型属性和ExceptionHandler

如果要在整个控制器(或特定的控制器列表)中使用验证程序,可以使用其属性为其指定控制器类

@ControllerAdvice(assignableTypes = { Controller1.class, Controller2.class})

很好的解决方案,但它仍然需要我将验证器专门绑定到每个活页夹,如
@InitBinder(“OrganizationForm”)
。是否真的没有办法注册所有验证器并让
@验证
使用
验证器
支持
方法找到正确的验证器?@Geditdk如果不想绑定验证器,可以使用
jsr 303
验证框架。由
hibernate
spring
提供的实现不使用验证框架似乎很奇怪。@zeroflagL我使用的是抱歉,我的评论措词不当。我指的是类似于豆子验证的东西。这对我来说容易多了。