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

Spring MVC运行报Constructor threw exception错误如何解决

问题根因

你遇到的报错确实是Spring依赖版本不一致导致的:

  • 你引入的spring-webmvc版本为5.3.10,该版本中BeanNameUrlHandlerMapping初始化需要调用org.springframework.core.log.LogDelegateFactory.getHiddenLog()方法,这个方法是Spring 5.3版本新增的API
  • 但你的spring-context、spring-beans版本为5.2.17.RELEASE,对应版本的Spring核心包中没有这个方法,所以运行时抛出NoSuchMethodError异常。

你虽然配置了spring-framework-bom做版本统一,但两个配置问题导致bom未生效:一是你给每个Spring依赖单独硬编码了版本号,优先级高于bom管理;二是bom的版本变量${spring.version}没有赋值,无法起到统一版本的作用。

修复步骤

  1. 统一Spring所有依赖版本
    要么所有Spring组件都用5.2.x版本,要么都升级到5.3.x版本,这里推荐统一用5.3.10版本,修改pom.xml配置:
    首先给${spring.version}赋值,然后移除所有Spring依赖下单独写的version标签,交给bom统一管理:
<!-- 在properties节点新增版本配置 -->
<properties>
    <spring.version>5.3.10</spring.version>
</properties>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-framework-bom</artifactId>
            <version>${spring.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
    <!-- 移除所有Spring依赖的version标签 -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>4.0.1</version>
        <scope>provided</scope>
    </dependency>
</dependencies>
  1. 修正Controller返回的视图名
    你已经在视图解析器中配置了前缀/WEB-INF/views/,所以HelloController中直接返回welcome即可,否则会拼接出/WEB-INF/views/views/welcome.jsp的错误路径,后续会触发404:
@Override
protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception {
    return new ModelAndView("welcome");
}
  1. 清理本地Maven缓存后重新打包启动项目即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 13:36:01