news 2026/7/24 15:24:49

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【后端】【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 相关依赖和配置类。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/24 2:25:53

基于WebSocket实现实时图像生成:FLUX.1-dev模型前后端通信方案

基于WebSocket实现实时图像生成:FLUX.1-dev模型前后端通信方案 在AI内容生成日益普及的今天,用户不再满足于“输入提示词、等待结果”的静态交互模式。他们希望看到图像从模糊轮廓到细节丰富的演变过程——就像一位艺术家在画布上逐步勾勒作品。这种对“…

作者头像 李华
网站建设 2026/7/24 9:14:33

PyTorch安装与Qwen-Image部署全流程详解(附GPU优化技巧)

PyTorch安装与Qwen-Image部署全流程详解(附GPU优化技巧) 在生成式AI如火如荼的今天,图像创作已从“能否生成”转向“如何高效、稳定地生成高质量内容”。尤其在广告设计、数字艺术和电商配图等专业领域,用户不再满足于模糊或构图混…

作者头像 李华
网站建设 2026/7/24 4:53:37

浏览器串口助手终极指南:3分钟快速上手零安装串口调试

还在为复杂的串口调试工具安装而烦恼吗?波特律动串口助手作为一款创新的浏览器原生串口工具,让你告别繁琐的驱动配置,直接在浏览器中轻松管理串口设备!无论是物联网开发、嵌入式调试还是蓝牙BLE连接,这款工具都能帮你快…

作者头像 李华
网站建设 2026/7/23 22:01:37

NPM Scripts集成LLama-Factory前端监控面板,实时查看训练状态

NPM Scripts集成LLama-Factory前端监控面板,实时查看训练状态 在大模型开发日益普及的今天,越来越多的团队和个人开发者希望快速微调一个属于自己的语言模型——无论是用于客服对话、内容生成,还是内部知识库问答。然而,传统训练流…

作者头像 李华
网站建设 2026/7/24 3:56:19

从3D打印到专业设计:STL转STEP的桥梁工具

从3D打印到专业设计:STL转STEP的桥梁工具 【免费下载链接】stltostp Convert stl files to STEP brep files 项目地址: https://gitcode.com/gh_mirrors/st/stltostp 🚀 打破格式壁垒,开启设计新篇章! 你是否曾面临这样的…

作者头像 李华