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

Spring应用使用MongoTemplate连接MongoDB时出现NoSuchMethodError求助

问题分析与解决方案

问题根源

这个NoSuchMethodError是Spring核心依赖版本冲突导致的:

  • spring-data-mongodb:3.4.6属于Spring Data 2021.2.x版本,依赖的Spring核心版本为5.3.x,它调用的org.springframework.util.Assert.noNullElements(Collection, String)方法是Spring 4.3及以上版本才新增的。
  • 但你的类路径中同时存在多个低版本Spring组件(如spring-context-support:2.5.6、spring-web:3.0.2.RELEASE),这些旧版本的Assert类中没有该方法。当类加载器优先加载旧版本类时,就会抛出方法缺失异常。
  • 此外pom中指定的spring-web:3.0.2与类路径中的spring-web:5.3.22版本冲突,进一步加剧了依赖混乱。

解决方案

方案1:手动统一Spring依赖版本

  1. 替换pom中低版本的Spring依赖,与类路径中已有的5.3.x版本保持一致:
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>5.3.24</version> <!-- 和spring-context、spring-tx版本对齐 -->
</dependency>
  1. 清理或升级类路径中的旧版本Spring组件:
    • 移除spring-context-support:2.5.6、spring-jms:2.5.6这类低版本依赖;若业务需要,升级到5.3.x版本。
  2. 执行依赖树检查命令,确保所有Spring相关依赖版本统一:
mvn dependency:tree

方案2:使用Spring Boot依赖管理(推荐)

如果是Spring Boot项目,直接通过父依赖自动管理所有兼容版本,避免手动版本冲突:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.7.6</version> <!-- 该版本对应spring-data-mongodb:3.4.6,版本完全兼容 -->
    <relativePath/>
</parent>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-mongodb</artifactId>
    </dependency>
</dependencies>

引入后无需手动指定Spring、Spring Data MongoDB及MongoDB驱动的版本,父依赖会自动维护一套兼容的版本组合。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 05:50:26