SpringMVC项目报javax.validation.ValidationException: Unable to create a Configuration, because no Bean

SpringMVC项目启动是报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.

具体报错原因

23-Mar-2019 14:31:51.296 SEVERE [RMI TCP Connection(2)-127.0.0.1] org.apache.catalina.core.StandardContext.listenerStart Exception sending context initialized event to listener instance of class [org.springframework.web.context.ContextLoaderListener]
 org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.validation.beanvalidation.LocalValidatorFactoryBean#0': Invocation of init method failed; nested exception is 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 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1482)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:521)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458)
	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:628)
	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479)
	at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:389)
	at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:294)
	at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:112)
	at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4745)
	at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5207)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
	at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:752)
	at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:728)
	at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:734)
	at org.apache.catalina.startup.HostConfig.manageApp(HostConfig.java:1739)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:300)
	at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
	at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
	at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:482)
	at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:431)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:300)
	at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
	at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
	at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1468)
	at javax.management.remote.rmi.RMIConnectionImpl.access$300(RMIConnectionImpl.java:76)
	at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1309)
	at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1401)
	at javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:829)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:361)
	at sun.rmi.transport.Transport$1.run(Transport.java:200)
	at sun.rmi.transport.Transport$1.run(Transport.java:197)
	at java.security.AccessController.doPrivileged(Native Method)
	at sun.rmi.transport.Transport.serviceCall(Transport.java:196)
	at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:568)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:826)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:683)
	at java.security.AccessController.doPrivileged(Native Method)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:682)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)
Caused by: 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:188)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1541)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1479)
	... 57 more

 

网上多数文章是让添加hibernate-validator或者javax.validation

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

但是工程没有用到validation的jar

使用mvn dependency:tree 查看引用依赖发现工程里面org.glassfish.jersey.containers包引用了javax.validation(validation-api)

只需在引用是排除即可
 <dependency>
            <groupId>org.glassfish.jersey.containers</groupId>
            <artifactId>jersey-container-servlet-core</artifactId>
            <version>2.25.1</version>
            <exclusions>
                <exclusion>
                    <groupId>javax.validation</groupId>
                    <artifactId>validation-api</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

 

 
<think>我们遇到了一个关于Bean Validation的问题:在启动SpringMVC项目时,出现了`javax.validation.ValidationException: Unable to create a Configuration, because no Bean Validation provider could be found`的异常。根据引用[3]和引用[4]的信息,这是因为项目中引入了Bean Validation的API(如`javax.validation`包),但没有提供具体的实现。引用[3]指出,Java EE依赖只包含API而不包含实现,因此需要添加一个实现,比如Hibernate Validator。 解决方案:在项目的pom.xml文件中添加Hibernate Validator依赖。 具体步骤: 1. 打开pom.xml文件。 2. 在<dependencies>部分添加以下依赖: ```xml <dependency> <groupId>org.hibernate.validator</groupId> <artifactId>hibernate-validator</artifactId> <version>6.2.5.Final</version> <!-- 或者选择其他稳定版本,建议与Spring Boot版本兼容 --> </dependency> ``` 注意:版本选择需要与Spring Boot版本兼容。根据当前项目使用的Spring Boot版本是2.7.6,我们可以选择Hibernate Validator的版本。通常,Spring Boot的父POM中已经管理了Hibernate Validator的版本,但为了确保,我们可以查看Spring Boot 2.7.6对应的Hibernate Validator版本。根据Spring Boot 2.7.x的文档,它默认使用Hibernate Validator 6.2.x。因此,我们可以使用6.2.5.Final。 另外,引用[4]提到使用5.1.1.Final版本,但那是较旧的版本。对于Spring Boot 2.7.6,建议使用6.2.x版本。 添加依赖后,重新构建项目,问题应该得到解决。 如果问题仍然存在,请检查是否有其他依赖冲突,比如多个不同版本的验证框架。 下面我们更新pom.xml文件,添加Hibernate Validator依赖。</think>### 解决 Bean Validation 提供程序未找到错误 #### 问题原因分析 当项目使用 `javax.validation` API 但缺少实现时,会出现以下错误: ```java javax.validation.NoProviderFoundException: Unable to create a Configuration, because no Bean Validation provider could be found. Add Hibernate Validator to classpath ``` 根本原因是: 1. Java EE 仅提供验证 API 接口,不含实现[^3] 2. Spring Boot 自动配置需要具体实现(如 Hibernate Validator) 3. 项目依赖中缺少验证实现库 --- ### 解决方案:添加 Hibernate Validator 依赖 在 `pom.xml` 中添加以下依赖(**推荐版本**): ```xml <dependency> <groupId>org.hibernate.validator</groupId> <artifactId>hibernate-validator</artifactId> <version>6.2.5.Final</version> <!-- 兼容Spring Boot 2.7.x --> </dependency> ``` #### 版本选择建议 | Spring Boot 版本 | Hibernate Validator 版本 | |------------------|--------------------------| | 2.7.x (当前) | 6.2.5.Final | | 3.x | 8.0.1.Final | --- ### 完整配置示例 ```xml <properties> <!-- 添加版本管理 --> <hibernate.validator.version>6.2.5.Final</hibernate.validator.version> </properties> <dependencies> <!-- 其他依赖... --> <!-- 添加Bean Validation实现 --> <dependency> <groupId>org.hibernate.validator</groupId> <artifactId>hibernate-validator</artifactId> <version>${hibernate.validator.version}</version> </dependency> <!-- 可选:EL表达式支持(复杂验证需要) --> <dependency> <groupId>org.glassfish</groupId> <artifactId>jakarta.el</artifactId> <version>4.0.2</version> </dependency> </dependencies> ``` --- ### 验证方案是否生效 1. **启动应用**:检查是否仍抛出异常 2. **创建测试验证**: ```java import javax.validation.constraints.NotBlank; public class User { @NotBlank(message = "用户名不能为空") private String username; // Getter/Setter } ``` 3. **在Controller中使用**: ```java @PostMapping("/users") public ResponseEntity<?> createUser(@Valid @RequestBody User user) { // 若验证失败会自动返回400错误 return ResponseEntity.ok(userService.save(user)); } ``` --- ### 依赖关系解析 ```mermaid graph LR A[javax.validation-api] --> B[提供接口] B --> C[需要实现] C --> D[Hibernate Validator] D --> E[执行实际验证] ``` > **关键点**:`spring-boot-starter-web` 包含验证API但不含实现[^3],必须显式添加实现库[^4]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值