当前位置: 首页 > news >正文

【后端】【Java】Swagger 与 Spring Boot 2.6+ 版本不兼容的问题

Spring Boot 2.6+ 修改了路径匹配策略,导致 Springfox Swagger 3.0.0 出现空指针异常,启动后报错如下所示:

2025-12-16 00:00:56 [main] INFO o.a.catalina.core.StandardService - Stopping service [Tomcat] 2025-12-16 00:00:56 [main] INFO o.s.b.a.l.ConditionEvaluationReportLoggingListener - Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. 2025-12-16 00:00:56 [main] ERROR o.s.boot.SpringApplication - Application run failed org.springframework.context.ApplicationContextException: Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException: Cannot invoke "org.springframework.web.servlet.mvc.condition.PatternsRequestCondition.getPatterns()" because "this.condition" is null at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:181) at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:54) at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:356) at java.base/java.lang.Iterable.forEach(Iterable.java:75) at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:155) at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:123) at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:937) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:586) at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145) at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:745) at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:423) at org.springframework.boot.SpringApplication.run(SpringApplication.java:307) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1317) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1306) at com.example.chapter05.Chapter05Application.main(Chapter05Application.java:13) Caused by: java.lang.NullPointerException: Cannot invoke "org.springframework.web.servlet.mvc.condition.PatternsRequestCondition.getPatterns()" because "this.condition" is null at springfox.documentation.spring.web.WebMvcPatternsRequestConditionWrapper.getPatterns(WebMvcPatternsRequestConditionWrapper.java:56) at springfox.documentation.RequestHandler.sortedPaths(RequestHandler.java:113) at springfox.documentation.spi.service.contexts.Orderings.lambda$byPatternsCondition$3(Orderings.java:89) at java.base/java.util.Comparator.lambda$comparing$77a9974f$1(Comparator.java:473) at java.base/java.util.TimSort.countRunAndMakeAscending(TimSort.java:355) at java.base/java.util.TimSort.sort(TimSort.java:220) at java.base/java.util.Arrays.sort(Arrays.java:1307) at java.base/java.util.ArrayList.sort(ArrayList.java:1721) at java.base/java.util.stream.SortedOps$RefSortingSink.end(SortedOps.java:392) at java.base/java.util.stream.Sink$ChainedReference.end(Sink.java:258) at java.base/java.util.stream.Sink$ChainedReference.end(Sink.java:258) at java.base/java.util.stream.Sink$ChainedReference.end(Sink.java:258) at java.base/java.util.stream.Sink$ChainedReference.end(Sink.java:258) at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:510) at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682) at springfox.documentation.spring.web.plugins.WebMvcRequestHandlerProvider.requestHandlers(WebMvcRequestHandlerProvider.java:81) at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682) at springfox.documentation.spring.web.plugins.AbstractDocumentationPluginsBootstrapper.withDefaults(AbstractDocumentationPluginsBootstrapper.java:107) at springfox.documentation.spring.web.plugins.AbstractDocumentationPluginsBootstrapper.buildContext(AbstractDocumentationPluginsBootstrapper.java:91) at springfox.documentation.spring.web.plugins.AbstractDocumentationPluginsBootstrapper.bootstrapDocumentationPlugins(AbstractDocumentationPluginsBootstrapper.java:82) at springfox.documentation.spring.web.plugins.DocumentationPluginsBootstrapper.start(DocumentationPluginsBootstrapper.java:100) at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:178) ... 14 common frames omitted

修复方案:

在 application.yml 中添加了以下配置:

spring: mvc: pathmatch: matching-strategy: ant_path_matcher

📝 问题说明

原因:

  • Spring Boot 2.6+ 默认使用 PathPatternParser作为路径匹配策略
  • Springfox Swagger 3.0.0 仍然使用旧的 AntPathMatcher
  • 两者不兼容导致空指针异常

解决办法:
将 Spring MVC 的路径匹配策略改回 ant_path_matcher,使其与 Swagger 兼容。

🚀 现在可以重新启动应用

重启 Chapter05Application 后:
- 应用将正常启动
- Swagger UI 可访问:http://localhost:8080/swagger-ui/
- 所有 RESTful 接口正常工作

如果您不需要 Swagger 文档功能,也可以选择删除 Swagger 相关依赖和配置类。

http://www.jsqmd.com/news/95776/

相关文章:

  • LeakCanary如何避免误报内存泄漏?
  • LeakCanary 检测内存泄漏的核心原理
  • diskinfo下载官网之外的选择:监控Qwen3-VL-30B运行状态的硬件工具
  • 使用Conda管理Stable Diffusion 3.5 FP8依赖包的最佳实践
  • 基于SSM的企业项目管理系统【源码+文档+调试】
  • 火山引擎AI大模型加持!Qwen-Image-Edit-2509助力电商视觉优化
  • CUDA安装与FP8支持:让Stable Diffusion 3.5在RTX4090上飞起来
  • APK签名打包流程:发布正式版ACE-Step安卓应用必备步骤
  • 如何部署Wan2.2-T2V-A14B镜像并调用token进行推理?
  • 【go语言 | 第3篇】go中类的封装、继承、多态 + 反射
  • 虚拟零售中AI架构的多语言支持:如何适应全球化市场?
  • 零基础入门Stable Diffusion 3.5 FP8:手把手教你完成Python安装配置
  • 【PMSG风力涡轮机建模】基于直驱永磁同步发电机(PMSG)的1.5MW风力发电机的详细建模(Simulink仿真实现)
  • Android Studio开发APP接入ACE-Step音乐API:移动端创作新体验
  • k230 Pyhton三角形识别
  • 终极右键菜单优化利器:ContextMenuManager完全使用手册
  • 年营收2000亿电商,3370万用户信息泄露,CEO引咎辞职
  • 终极网站下载工具:5分钟学会整站备份与离线浏览
  • 如何快速释放Windows磁盘空间:终极存储分析工具完整指南
  • 基于OpenSpec标准构建:HunyuanVideo-Foley API设计规范公开
  • 20、数字 FIR 滤波器的逐步设计
  • 3分钟学会原神帧率解锁:告别卡顿的终极优化指南
  • Driver Store Explorer终极指南:轻松管理Windows驱动存储库
  • 一键升级 OpenSSH 10到最新版:告别手工编译、兼容国产系统、批量部署无忧!
  • 22、IIR滤波器的逐步设计
  • 23、IIR滤波器的逐步设计与不同类型滤波器的特性分析
  • 9、卷积与相关性:原理、计算与应用
  • 10、Z变换:原理、计算与应用详解
  • 11、Z变换与差分方程求解全解析
  • 12、离散系统差分方程求解与信号处理相关问题解析