我目前正在使用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获取此异常的原因?
干杯,
上限
答案 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
。
使用Jarvana搜索可提供org.postgresql.Driver
的依赖项,如下所示: http://www.jarvana.com/jarvana/search?search_type=class&java_class=org.postgresql.Driver
将上述依赖项转换为maven依赖格式:
<dependency> <groupId>postgresql</groupId> <artifactId>postgresql</artifactId> <version>9.1-901.jdbc4</version> </dependency>
通过搜索 this 确认上述内容在Maven Central上可用: g:"postgresql" AND a:"postgresql"
>
(其中g
代表GroupID,a
代表artifactID)
最后,将其添加到您的pom.xml
如果您对所需的依赖关系有一个大致的了解,或者可以找出给出列表所需的依赖关系,那么 m2e 的依赖关系搜索可能是添加关键字的最快方式依赖于你的pom.xml
步骤:
以下快照中标记的A-D:
在IntelliJ中,查找依赖项要容易得多。您需要做的就是确保maven中央仓库已被IntelliJ索引,如下所示:
然后,进入pom,执行 dep + Tab (或 Alt + Insert 如图所示here),这就是你得到的:
如果您所在的类具有未解析的导入,则快速修复程序会为您提供搜索和添加相应的maven存储库的选项,方法是执行 Alt + Enter 在缺少的类/包上:
我说真棒!
答案 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:
我从WEB-INF / lib目录中删除了com.springsource.javax.validation-1.0.0.GA.jar,因为它较旧且不再受支持。这样做之后,我的应用程序运行得很好。我从其他帖子中了解到,我的问题与类路径上相同文件的重复版本有关。我在阅读Spring 3 Validation
后想出了导致问题的文件