springfox 3.x 在 spring boot 2.6+ 需配置 spring.mvc.throw-exception-if-no-handler-found: false 且 spring.resources.add-mappings: true,访问路径为 /swagger-ui/;spring boot 3.x 不兼容 springfox,须迁移到 springdoc-openapi。

Springfox 3.x 在 Spring Boot 2.6+ 启动就报 NoHandlerFoundException
Spring Boot 2.6 默认启用了 spring.mvc.throw-exception-if-no-handler-found=true,而 Springfox 3.x 的 Docket 注册的静态资源(如 /swagger-ui.html)没被 MVC 资源处理器识别,导致 404 直接抛异常,页面打不开。
- 在
application.yml中显式关闭该开关:spring: mvc: throw-exception-if-no-handler-found: false resources: add-mappings: true - 同时必须保留
spring.resources.add-mappings: true,否则/webjars/**路径下的 Swagger UI 静态资源根本不会注册 - 别信某些博客说“加个
@EnableWebMvc就行”——那会彻底禁用 Spring Boot 的自动配置,得自己配资源处理器,得不偿失
Swagger UI 访问 404,但后端接口能正常返回 JSON
说明 springfox-swagger2 和 springfox-swagger-ui 依赖已生效,但前端资源路径没对上。Springfox 3.x 把 UI 入口从 /swagger-ui.html 改成了 /swagger-ui/(末尾带斜杠),且依赖 /webjars/swagger-ui/index.html 重定向。
- 确认引入的是
springfox-swagger-ui(不是swagger-ui单独 jar) - 访问地址必须是
http://localhost:8080/swagger-ui/,少斜杠、多.html或写成/swagger-ui/index.html都会 404 - 如果用了网关或反向代理,检查是否过滤了
/webjars/**路径(Nginx 常见漏配location /webjars)
Docket 配置里 select().apis() 不生效
常见于扫描不到 Controller——不是注解没加,而是 RequestHandlerSelectors 的匹配逻辑太严格,默认只认 @Api 或 @RestController,但如果你用的是 @Controller + @ResponseBody,它直接跳过。
- 稳妥写法是用
RequestHandlerSelectors.basePackage("com.example.api")明确指定包路径 - 避免用
any(),它会把 Actuator、Spring Security 的内部 endpoint 也扫进来,生成大量无意义接口 - 如果 Controller 有泛型参数(比如
BaseController<t></t>),Springfox 3.x 解析可能失败,接口消失——这时只能手动加@Api注解兜底
升级到 Spring Boot 3.x 后 Springfox 彻底跑不起来
Springfox 官方早在 2022 年就停止维护,最后一个版本 3.0.0 不支持 Jakarta EE 9+(即 jakarta.* 包名),而 Spring Boot 3.x 强制使用 Jakarta EE 9。编译可能过,但运行时会报 ClassNotFoundException: javax.servlet.http.HttpServletRequest。
立即学习“Java免费学习笔记(深入)”;
- 没有兼容方案,
springfox在 Spring Boot 3.x 环境下就是不可用的 - 必须迁移到
springdoc-openapi-starter-webmvc-ui(即 Swagger 3 / OpenAPI 3 实现) - 迁移成本不高:删掉所有
springfox依赖和@EnableSwagger2、Docket配置,加上新依赖后/swagger-ui.html自动可用(注意路径又变回带 .html 了)










