无法创建配置,因为找不到Bean验证提供程序.将类似Hibernate Validator(RI)的提供程序添加到类路径中

Blu*_*ish 33 email validation spring

今天,我正在研究发送电子邮件,但是当我添加时

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context-support</artifactId>
    <version>4.2.5.RELEASE</version>
</dependency>

<dependency>
    <groupId>javax</groupId>
    <artifactId>javaee-api</artifactId>
    <version>7.0</version>
</dependency>

<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>javax.mail-api</artifactId>
    <version>1.5.5</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

到pom.xml并在服务器上部署,我得到一个"无法创建配置,因为找不到Bean验证提供程序.将类似Hibernate Validator(RI)的提供程序添加到类路径中." 验证异常.

我只是将上面的依赖项和电子邮件的依赖项添加到模板MVC项目中.

错误堆栈跟踪:

DEBUG: org.springframework.ui.context.support.UiApplicationContextUtils - Unable to locate ThemeSource with name 'themeSource': using default [org.springframework.ui.context.support.DelegatingThemeSource@20212230]
DEBUG: org.springframework.validation.beanvalidation.OptionalValidatorFactoryBean - Failed to set up a Bean Validation provider
javax.validation.ValidationException: Unable to create a Configuration, because no Bean Validation provider could be found. Add a provider like Hibernate Validator (RI) to your classpath.
    at javax.validation.Validation$GenericBootstrapImpl.configure(Validation.java:271)
    at org.springframework.validation.beanvalidation.LocalValidatorFactoryBean.afterPropertiesSet(LocalValidatorFactoryBean.java:223)
    at org.springframework.validation.beanvalidation.OptionalValidatorFactoryBean.afterPropertiesSet(OptionalValidatorFactoryBean.java:40)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1637)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1574)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:772)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:839)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:538)
    at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:667)
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:633)
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:681)
    at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:552)
    at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:493)
    at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136)
    at javax.servlet.GenericServlet.init(GenericServlet.java:158)
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1241)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1154)
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1041)
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4944)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5230)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1409)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1399)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Run Code Online (Sandbox Code Playgroud)

eke*_*iga 78

添加Bean Validation Provider依赖项,例如Hibernate Validator.Bean Validation API依赖项在类路径上可用,但缺少实现.将以下内容添加到您的pom.xml中

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>5.2.4.Final</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

  • 这就行了,我想知道最近这个错误是如何呈现的,而且这个项目已经开发了一年多...... (9认同)
  • 嗨,它说:“ ...类路径的Hibernate Validator(RI)之类的提供程序。” 这是否意味着有其他选择?因为休眠验证器似乎带入了整个jboss家族。 (3认同)
  • 注意:按照 https://mvnrepository.com/artifact/org.hibernate/hibernate-validator,“org.hibernate”工件位置已移动到“org.hibernate.validator” (3认同)
  • 如果此答案对您有帮助,请接受答案。 (2认同)
  • 有没有替代 hibernate-validator 的方法?它似乎减慢了应用程序的启动速度 (2认同)

小智 48

要解决 Spring Boot 中的相同问题,请将以下依赖项添加到您的项目中

implementation 'org.springframework.boot:spring-boot-starter-validation'
Run Code Online (Sandbox Code Playgroud)

  • 对于 mvn 用户:使用此 &lt;dependency&gt; &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt; &lt;artifactId&gt;spring-boot-starter-validation&lt;/artifactId&gt; &lt;/dependency&gt; (2认同)
  • 在将 Spring Boot 从 2.2.2.RELEASE 更新到 2.4.2 后,这个答案对我有帮助。 (2认同)
  • 这应该是公认的答案,因为我没有在我的应用程序中使用 hibernate 那么为什么我需要添加 hibernate 验证器,我只需要添加 spring 验证 (2认同)

小智 31

您只能添加一个依赖项,然后解决该错误。

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-validation</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)

org.springframework.boot:spring-boot-starter-validation具有以下依赖关系,即org.glassfish:jakarta.elorg.hibernate.validator:hibernate-validator。然后,org.hibernate.validator:hibernate-validator就有了jakarta.validation:jakarta.validation-api

在此输入图像描述


cs4*_*s4r 14

我让它工作,将 hibernate-validator 的依赖关系从版本降级7.0.2.Final6.0.13.Final.

这就是我的依赖项的样子:

    <dependency>
        <groupId>javax.validation</groupId>
        <artifactId>validation-api</artifactId>
        <version>2.0.1.Final</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate.validator</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>6.0.13.Final</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish</groupId>
        <artifactId>javax.el</artifactId>
        <version>3.0.0</version>
    </dependency>
Run Code Online (Sandbox Code Playgroud)


Rak*_*ari 7

您需要添加任何验证提供程序依赖项,例如 Hibernate Validator。

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>5.2.1.Final</version>
</dependency>
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator-annotation-processor</artifactId>
    <version>5.2.1.Final</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)


小智 7

如果您使用 spring-boot-starter 依赖项,那么最好添加另一个依赖项进行验证。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)


Mos*_*sha 5

就我而言,我转向了 Hibernate 7.x,但有一个旧的显式依赖:

<dependency>
  <artifactId>validation-api</artifactId>
  <groupId>javax.validation</groupId>
  <version>2.0.1.Final</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

一旦我删除了这个依赖项,并允许 Hibernate 将依赖项传递给 Jakarta Bean Validation API (jakarta.validation:jakarta.validation-api:3.0.0)。一切正常。