You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级Spring Boot3.x/Spring6.x后handlerExceptionResolver Bean创建异常求助

问题

我的应用同时使用Spring Boot和Spring依赖,因spring-web存在安全漏洞,需从5.3.33升级至6.x版本。此前使用Spring Boot 2.7.18(基于Spring Framework 5.x)。

已完成以下操作:

  • 将项目从Java 11升级至Java 17
  • 在pom.xml中把Spring Boot starter parent及具体版本从2.7.18改为3.2.0
  • 将spring-web从5.3.33升级至6.0.19
  • 修复了构建过程指出的版本兼容性代码问题

执行mvn spring-boot:run命令时,项目构建成功但无法启动,报错:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'handlerExceptionResolver' defined in class path resource [org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$EnableWebMvcConfiguration.class]: Failed to instantiate [org.springframework.web.servlet.HandlerExceptionResolver]: Factory method 'handlerExceptionResolver' threw exception with message: org/springframework/web/util/DisconnectedClientHelper

搜索及相关建议让修复项目内的handlerExceptionResolver实现,但我并未实现该类。

完整堆栈信息:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'handlerExceptionResolver' defined in class path resource [org/springframework/boot/autoconfigure
/web/servlet/WebMvcAutoConfiguration$EnableWebMvcConfiguration.class]: Failed to instantiate [org.springframework.web.servlet.HandlerExceptionResolver]: Factory method 'handlerExceptionResolver' threw exception with message: org/springframework/web/util/DisconnectedClientHelper
        at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:655) ~[spring-beans-6.1.1.jar:6.1.1]
        at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:643) ~[spring-beans-6.1.1.jar:6.1.1]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1336) ~[spring-beans-6.1.1.jar:6.1.1]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1166) ~[spring-beans-6.1.1.jar:6.1.1]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:563) ~[spring-beans-6.1.1.jar:6.1.1]       
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:523) ~[spring-beans-6.1.1.jar:6.1.1]
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:325) ~[spring-beans-6.1.1.jar:6.1.1]
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-6.1.1.jar:6.1.1]
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:323) ~[spring-beans-6.1.1.jar:6.1.1]
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-6.1.1.jar:6.1.1]
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:973) ~[spring-beans-6.1.1.jar:6.1.1]
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:946) ~[spring-context-6.1.1.jar:6.1.1]        
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:616) ~[spring-context-6.1.1.jar:6.1.1]
        at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) ~[spring-boot-3.2.0.jar:3.2.0]
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:753) [spring-boot-3.2.0.jar:3.2.0]
        at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:455) [spring-boot-3.2.0.jar:3.2.0]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:323) [spring-boot-3.2.0.jar:3.2.0]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1342) [spring-boot-3.2.0.jar:3.2.0]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1331) [spring-boot-3.2.0.jar:3.2.0]
        at com.verint.useragentservice.UseragentServiceApplication.main(UseragentServiceApplication.java:16) [classes/:?]
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[?:?]
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
        at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[?:?]
        at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:50) [spring-boot-devtools-3.2.0.jar:3.2.0]
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.web.servlet.HandlerExceptionResolver]: Factory method 'handlerExceptionResolver' threw exception with message: org/springframework/web/util/DisconnectedClientHelper
        at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:178) ~[spring-beans-6.1.1.jar:6.1.1]
        at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:651) ~[spring-beans-6.1.1.jar:6.1.1]
        ... 24 more
Caused by: java.lang.NoClassDefFoundError: org/springframework/web/util/DisconnectedClientHelper
        at org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver.<clinit>(ExceptionHandlerExceptionResolver.java:87) ~[spring-webmvc-6.1.1.jar:6.1.1] 
        at org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport.createExceptionHandlerExceptionResolver(WebMvcConfigurationSupport.java:1079) ~[spring-webmvc-6.1.1.jar:6.1.1]
        at org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration$EnableWebMvcConfiguration.createExceptionHandlerExceptionResolver(WebMvcAutoConfiguration.java:554) ~[spring-boot-autoconfigure-3.2.0.jar:3.2.0]
        at org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport.addDefaultHandlerExceptionResolvers(WebMvcConfigurationSupport.java:1051) ~[spring-webmvc-6.1.1.jar:6.1.1]
        at org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport.handlerExceptionResolver(WebMvcConfigurationSupport.java:1005) ~[spring-webmvc-6.1.1.jar:6.1.1] 
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[?:?]
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
        at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[?:?]
        at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:140) ~[spring-beans-6.1.1.jar:6.1.1]
        at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:651) ~[spring-beans-6.1.1.jar:6.1.1]
        ... 24 more
Caused by: java.lang.ClassNotFoundException: org.springframework.web.util.DisconnectedClientHelper
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) ~[?:?]
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) ~[?:?]
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520) ~[?:?]
        at org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver.<clinit>(ExceptionHandlerExceptionResolver.java:87) ~[spring-webmvc-6.1.1.jar:6.1.1] 
        at org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport.createExceptionHandlerExceptionResolver(WebMvcConfigurationSupport.java:1079) ~[spring-webmvc-6.1.1.jar:6.1.1]
        at org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration$EnableWebMvcConfiguration.createExceptionHandlerExceptionResolver(WebMvcConfigurationSupport.java:554) ~[spring-boot-autoconfigure-3.2.0.jar:3.2.0]
        at org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport.addDefaultHandlerExceptionResolvers(WebMvcConfigurationSupport.java:1051) ~[spring-webmvc-6.1.1.jar:6.1.1]
        at org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport.handlerExceptionResolver(WebMvcConfigurationSupport.java:1005) ~[spring-webmvc-6.1.1.jar:6.1.1] 
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[?:?]
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
        at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[?:?]
        at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:140) ~[spring-beans-6.1.1.jar:6.1.1]
        at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:651) ~[spring-beans-6.1.1.jar:6.1.1]
        ... 24 more

解决方案

问题原因

Spring Boot 3.2.0默认依赖的Spring Framework版本是6.1.x(从堆栈中的spring-webmvc-6.1.1.jar可确认),但你手动指定了spring-web的版本为6.0.19,导致Spring模块版本不兼容。DisconnectedClientHelper是Spring Framework 6.1.x新增的类,spring-webmvc 6.1.1在初始化时需要这个类,但spring-web 6.0.19中不存在该类,从而触发NoClassDefFoundError,最终导致handlerExceptionResolver bean创建失败。

修复步骤

  1. 移除手动指定的spring-web版本:在pom.xml中删除对spring-web的版本声明,让Spring Boot的parent依赖管理自动维护所有Spring模块的兼容版本。
  2. 清理并重新构建项目:执行以下命令,确保本地仓库中的依赖都是匹配的版本:
    mvn clean install
    
  3. 重新启动项目:再次执行启动命令:
    mvn spring-boot:run
    

注意事项

Spring Boot的starter parent已经为所有Spring核心模块维护了经过验证的兼容版本,手动指定单个模块的版本极易引发版本冲突。后续升级时,优先通过调整Spring Boot版本来同步所有Spring Framework依赖的版本,避免手动指定单个模块版本。

内容的提问来源于stack exchange,提问作者Tonesz586

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 04:37:32