【问题标题】:Spring hibernate validation春季休眠验证
【发布时间】:2016-06-23 20:08:03
【问题描述】:

我正在解决与 Hibernate 验证相关的问题。我有一个例外org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.validation.beanvalidation.OptionalValidatorFactoryBean#0': Invocation of init method failed; nested exception is java.lang.AbstractMethodError: org.hibernate.validator.engine.ConfigurationImpl.getDefaultParameterNameProvider()Ljavax/validation/ParameterNameProvider;

这是我在控制器中的代码

@RequestMapping(value = "/student/result", method = RequestMethod.POST)
public String addStudent(@ModelAttribute("studentForm") @Valid Student student,
        ModelMap model, BindingResult result) {
    if (result.hasErrors()) {
        return "add";
    }
    model.addAttribute("message", "Student added successfully");
    model.addAttribute("student", student);
    return "result";
}

这是我的部分 spring-servlet.xml

<mvc:annotation-driven />
<bean class="org.springframework.context.support.ResourceBundleMessageSource"
      id="messageSource">
    <property name="basename" value="messages" />
</bean>

我的依赖

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>5.2.4.Final</version>
</dependency>

<dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
    <version>1.1.0.Final</version>
</dependency>

我不知道我做错了什么。我是按照教程做的。

【问题讨论】:

    标签: java spring hibernate validation spring-mvc


    【解决方案1】:

    Hibernate 验证器依赖项本身将 java 验证 API 作为传递依赖项。来自文档:

    "项目设置

    要在 Maven 项目中使用 Hibernate Validator,只需将以下依赖项添加到您的 pom.xml:

    <dependency>
       <groupId>org.hibernate</groupId>
       <artifactId>hibernate-validator</artifactId>
       <version>5.2.4.Final</version>
    </dependency>
    

    这会传递对 Bean Validation API (javax.validation:validation-api:{bv_api}) 的依赖。”

    不需要自己声明依赖。但是,您的问题似乎与某些 Spring 与您的 Hibernate 版本不兼容有关:

    使用名称创建 bean 时出错 'org.springframework.validation.beanvalidation.OptionalValidatorFactoryBean#0': 调用 init 方法失败;嵌套异常是 java.lang.AbstractMethodError: org.hibernate.validator.engine.ConfigurationImpl.getDefaultParameterNameProvider()Ljavax/validation/ParameterNameProvider;

    基本上,我敢打赌,您使用的 Spring 版本与 Hibernate 5 完全不兼容。

    另请参阅:

    【讨论】:

    • 谢谢。我应该使用哪个版本?
    • 看看 spring 文档。您可以升级 spring 版本以确保 hibernate 5.x 兼容性或将 hibernate 降级到 4.x。
    【解决方案2】:

    您的 BindingResult 和 @ModelAttribute 排序无效。 ModelAttribute 后跟 BindingResult。 试试

     public String addStudent(ModelMap model, @ModelAttribute("studentForm") @Valid Student student, BindingResult result)
    

    【讨论】:

      猜你喜欢
      • 2017-01-27
      • 1970-01-01
      • 1970-01-01
      • 2016-03-24
      • 2013-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-14
      相关资源
      最近更新 更多