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

SpringBoot 3.0.1添加springdoc依赖遇ClassNotFoundException求助

SpringBoot 3.0.1 引入springdoc后javax.servlet.http.HttpServletRequest找不到的解决方案

问题原因

SpringBoot 3.x 基于 Jakarta EE 9+,Servlet API 包名已从 javax.servlet 全面迁移到 jakarta.servlet。你遇到的错误,是因为项目中某个依赖引入了旧版Java EE的javax.servlet包,与SpringBoot3的jakarta.servlet包产生冲突,导致类加载时无法找到正确的类。

解决方法

  1. 定位引入javax.servlet的依赖
    执行Maven命令筛选出所有带javax.servlet的依赖:

    mvn dependency:tree -Dincludes=javax.servlet:*
    

    根据你提供的依赖树结果,找到对应的依赖项,在pom.xml中排除它的javax.servlet依赖:

    <dependency>
        <!-- 替换为实际引入javax.servlet的依赖坐标 -->
        <groupId>xxx</groupId>
        <artifactId>xxx</artifactId>
        <exclusions>
            <exclusion>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    
  2. 确保springdoc版本适配
    springdoc-openapi-starter-webmvc-ui 2.x系列是适配SpringBoot3的,你已经移除了其他springdoc依赖,这一步无需额外操作,但如果后续仍有问题,再确认是否有遗漏的旧版springdoc依赖。

  3. 强制使用Jakarta Servlet API
    利用SpringBoot的依赖管理,确保项目优先使用jakarta版本的Servlet API:
    首先,SpringBoot的spring-boot-starter-web已经包含了正确的jakarta.servlet-api,确保这个依赖存在。如果有顽固依赖硬引入javax.servlet,可以在dependencyManagement中强制指定版本:

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>jakarta.servlet</groupId>
                <artifactId>jakarta.servlet-api</artifactId>
                <version>6.0.0</version> <!-- 对应SpringBoot3.0.1的版本 -->
                <scope>provided</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    

注意事项

如果是多模块项目,要逐一检查所有子模块的依赖,避免子模块引入javax.servlet依赖未被排除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 14:22:52