javax.validation.ValidationException:无法找到默认提供程序

时间:2010-10-20 22:54:50

标签: java spring bean-validation hibernate-validator

我目前正在使用Spring MVC Web应用程序并尝试使用@Valid注释挂钩验证。当我启动应用程序时,我遇到以下异常:

javax.validation.ValidationException: Unable to find a default provider

我在类路径上有Hibernate Validator 3.1.0.GA以及javax验证1.0.0.GA,Hibernate Core 3.3.1.GA和Hibernate Annotations 3.4.0.GA。

在那些我没有看到的版本中是否存在不兼容性,或者是否有人想到为什么我仍然在类路径上使用Hibernate Validator获取此异常的原因?

干杯,

上限

6 个答案:

答案 0 :(得分:37)

请参阅此答案:https://stackoverflow.com/a/3989936/325742

要修复,请添加此maven依赖 Hibernate Validator Annotation Processor

<dependency>
  <groupId>org.hibernate</groupId>
  <artifactId>hibernate-validator-annotation-processor</artifactId>
  <version>4.1.0.Final</version>
</dependency>

这是该工件的最新稳定版本,如here

所示

查找依赖关系的通用方法

假设您有一个NoClassDefFoundError表示未找到班级org.postgresql.Driver

  1. 使用Jarvana搜索可提供org.postgresql.Driver的依赖项,如下所示: http://www.jarvana.com/jarvana/search?search_type=class&java_class=org.postgresql.Driver enter image description here

  2. 将上述依赖项转换为maven依赖格式:

    <dependency>
        <groupId>postgresql</groupId>
       <artifactId>postgresql</artifactId>
       <version>9.1-901.jdbc4</version>
     </dependency>
    
  3. 通过搜索 this 确认上述内容在Maven Central上可用: g:"postgresql" AND a:"postgresql" (其中g代表GroupID,a代表artifactID)

  4. 最后,将其添加到您的pom.xml


  5. 使用m2e

    查找依赖项

    如果您对所需的依赖关系有一个大致的了解,或者可以找出给出列表所需的依赖关系,那么 m2e 的依赖关系搜索可能是添加关键字的最快方式依赖于你的pom.xml

    步骤:

    1. 单击pom.xml
    2. 中的Dependencies选项卡(A)
    3. 点击添加(B)
    4. 通过groupId / artifactId(C)
    5. 搜索依赖项
    6. 从搜索结果中双击所需的一个,将其直接添加到您的pom.xml(D)
    7. 以下快照中标记的A-D: enter image description here


      在IntelliJ Idea

      中查找依赖项

      在IntelliJ中,查找依赖项要容易得多。您需要做的就是确保maven中央仓库已被IntelliJ索引,如下所示:

      enter image description here

      然后,进入pom,执行 dep + Tab (或 Alt + Insert 如图所示here),这就是你得到的: enter image description here

      如果您所在的类具有未解析的导入,则快速修复程序会为您提供搜索和添加相应的maven存储库的选项,方法是执行 Alt + Enter 在缺少的类/包上: enter image description here

      我说真棒!


答案 1 :(得分:26)

Hibernate Validator 3.1不是JSR303提供程序。您需要升级到Hibernate Validator 4或更高版本。

答案 2 :(得分:23)

没有Hibernate就发生了这件事。

在我的电脑上运行良好,它在我的EC2 Linux服务器上无效。

原因是validation-api-1.0.0.GA.jar下存在/usr/share/tomcat/lib文件。

删除validation-api-1.0.0.GA.jar后,效果很好。

答案 3 :(得分:2)

在我的情况下,我有同样的问题,但它发生了,因为由maven下载的hibernate-core版本4.1.8.Final的jar已损坏。我转到版本4.1.6.Final,它开始工作。我正在使用STS和Spring存储库。

希望这有助于某人。

答案 4 :(得分:0)

在相同的情况下,我只更新我的Jar版本,用于从hibernate-anotation和hibernate-common-annotation到下面列出的Hibernate4 anotations的anotations。 对于Hibernate 4,您可以使用此jar -

1-hibernate-commons-annotations-4.0.5.Final     2-hibernate-validator-4.2.0.Final

希望这对你也有用。

答案 5 :(得分:0)

我收到以下错误:

调用init方法失败;嵌套异常是javax.validation.ValidationException:无法获取可用的提供程序解析程序

我发现在我的WEB-INF / lib目录中,我在以下两个jar文件中都有两个版本的Validator.class:

  • org.springframework.context-3.1.1.RELEASE.jar
  • com.springsource.javax.validation-1.0.0.GA.jar

我从WEB-INF / lib目录中删除了com.springsource.javax.validation-1.0.0.GA.jar,因为它较旧且不再受支持。这样做之后,我的应用程序运行得很好。我从其他帖子中了解到,我的问题与类路径上相同文件的重复版本有关。我在阅读Spring 3 Validation

后想出了导致问题的文件