Spring Boot 3集成Swagger3报错Type javax.servlet.http.HttpServletRequest not present如何解决
问题分析与解决
报错原因
- Spring Boot 3 基于 Jakarta EE 9 规范,所有 Servlet API 相关类的包名已从
javax.servlet迁移至jakarta.servlet。 - 你使用的
springfox-swagger2和springfox-swagger-ui3.0.0 版本依赖的是旧版javax.servlet包,与 Spring Boot 3 的 Jakarta 规范完全不兼容,因此会出现找不到javax.servlet.http.HttpServletRequest类的错误。 - 虽然 Spring Boot 确实内置了 Servlet 容器,但它提供的是适配 Jakarta 规范的 Servlet API,而非旧的 javax 版本,两者包名不匹配导致了这个问题。
解决方案
推荐方案:替换为 springdoc-openapi(主流替代)
由于 springfox 已停止维护,且其 3.0.0 版本不支持 Spring Boot 3,建议改用 springdoc-openapi,它是专门适配 Spring Boot 3 的 OpenAPI 实现库。依赖配置如下:
<dependency> <groupId>org.springdoc</groupId> <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId> <version>2.2.0</version> <!-- 可根据需求选择最新稳定版 --> </dependency>
配置完成后,访问 http://localhost:8080/swagger-ui/index.html 即可查看接口文档。
备选方案(不推荐):添加迁移桥接依赖
如果一定要继续使用 springfox,可以尝试添加 javax 到 jakarta 的迁移桥接依赖,强制兼容旧包名,但可能引发其他潜在问题:
<dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-jakartaee-migration</artifactId> <version>1.0.0</version> </dependency>
内容的提问来源于stack exchange,提问作者Rajesh Yadav
相关产品推荐
相关产品推荐

