32

我目前正在开发 Spring MVC Web 应用程序并尝试使用 @Valid 注释连接验证。当我启动应用程序时,出现以下异常:

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

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

在我没有看到的那些版本中是否存在不兼容,或者任何人都可以想到为什么我仍然在类路径上使用 Hibernate Validator 得到这个异常的任何原因?

干杯,

帽子

4

6 回答 6

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>

这是该工件的最新稳定版本,从这里可以看出


查找依赖项的通用方法

假设你得到了NoClassDefFoundError一个说明org.postgresql.Driver找不到类的 aa。

  1. 使用 Jarvana 搜索可以org.postgresql.Driver像这样提供的依赖项:http ://www.jarvana.com/jarvana/search?search_type=class&java_class=org.postgresql.Driver它给出 在此处输入图像描述

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

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

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


使用 m2e 查找依赖项

如果您对所需的依赖有一个大致的了解,或者可以通过列表找出您需要的依赖,那么m2e的依赖搜索可能是向您的 pom.xml 添加依赖的最快方法

脚步 :

  1. 单击 pom.xml 中的 Dependencies 选项卡 (A)
  2. 点击添加 (B)
  3. 按 groupId/artifactId 搜索依赖项 (C)
  4. 双击搜索结果中所需的一项,将其直接添加到您的 pom.xml (D)

AD 标记在以下快照中: 在此处输入图像描述


在 IntelliJ Idea 中查找依赖项

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

在此处输入图像描述

然后,进入 pom,做一个dep+ Tab(或一个Alt+ Insert,如图所示),就是你得到的: 在此处输入图像描述

如果您在一个具有未解决导入的类中,那么快速修复为您提供了一个选项,通过在缺少的类/包上 执行Alt+来搜索和添加相应的 maven 存储库:Enter在此处输入图像描述

真棒我说!


于 2012-04-16T17:13:29.777 回答
27

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

于 2010-10-20T23:08:13.343 回答
23

这发生在我没有 Hibernate 的情况下。

在我的 PC 上运行良好,但在我的 EC2 Linux 服务器上却无法运行。

原因validation-api-1.0.0.GA.jar/usr/share/tomcat/lib.

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

于 2012-12-10T13:28:30.200 回答
2

就我而言,我遇到了同样的问题,但这是因为 maven 下载的 hibernate-core 版本 4.1.8.Final 的 jar 已损坏。我切换到 4.1.6.Final 版本,它开始工作了。我正在使用 STS 和 spring 存储库。

希望这可以帮助某人。

于 2013-05-02T14:20:16.890 回答
0

在同样的情况下,我只将我的 Jar 版本更新为从 hibernate-annotation 和 hibernate-common-annotation 到下面列出的 Hibernate4 注释的注释。对于 Hibernate 4,您可以使用这个 jars-

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

希望这也对你有用。

于 2015-11-04T06:10:32.557 回答
0

我收到以下错误:

调用 init 方法失败;嵌套异常是 javax.validation.ValidationException: Unable to get available provider resolvers

我发现在我的 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后,我找出了导致问题的文件

于 2015-12-11T21:29:57.717 回答