千家信息网

Spring Boot 2.6.x整合Swagger启动失败报错如何解决

发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,这篇文章主要介绍了Spring Boot 2.6.x整合Swagger启动失败报错如何解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Spring Boot 2.6.x
千家信息网最后更新 2025年11月08日Spring Boot 2.6.x整合Swagger启动失败报错如何解决

这篇文章主要介绍了Spring Boot 2.6.x整合Swagger启动失败报错如何解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Spring Boot 2.6.x整合Swagger启动失败报错如何解决文章都会有所收获,下面我们一起来看看吧。

    问题

    Spring Boot 2.6.x版本引入依赖 springfox-boot-starter (Swagger 3.0) 后,启动容器会报错:

    Failed to start bean ‘ documentationPluginsBootstrapper ‘ ; nested exception…

    原因

    Springfox 假设 Spring MVC 的路径匹配策略是 ant-path-matcher,而 Spring Boot 2.6.x版本的默认匹配策略是 path-pattern-matcher,这就造成了上面的报错。

    解决方案

    方案一(治标)

    在 application.properties 配置文件中修改mvc的匹配策略:

    spring.mvc.pathmatch.matching-strategy=ant-path-matcher

    注意:开始的时候我用这个方法的确可以正常启动了,但后来我发现此方法在某些服务启动时会失效!我查了一下才发现这个方法治标不治本,具体如下:

    只有在不使用 Spring Boot 的执行器时,此功能才起作用。

    无论配置的匹配策略如何,执行器将始终使用基于路径模式的解析 ( 也就是默认策略 ) 。

    如果您想在 Spring Boot 2.6及更高版本中将其与执行器一起使用,则需要对 Springfox 进行更改。

    所以解铃还须系铃人呐!要想彻底解决这个bug,需要修改的是 Springfox 。

    方案二(治本)

    这个办法是我在 github 上找到的,一个大佬提了一个解决方案是将 Springfox 的某 .java 文件复制到自己项目里进行修改,另一个大佬提了一个更好的解决方案,我觉得针不戳,在这里分享一下:

    在你的项目里添加这个 bean :(加在配置类里就可)

    @Beanpublic static BeanPostProcessor springfoxHandlerProviderBeanPostProcessor() {    return new BeanPostProcessor() {        @Override        public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {            if (bean instanceof WebMvcRequestHandlerProvider || bean instanceof WebFluxRequestHandlerProvider) {                customizeSpringfoxHandlerMappings(getHandlerMappings(bean));            }            return bean;        }        private  void customizeSpringfoxHandlerMappings(List mappings) {            List copy = mappings.stream()                    .filter(mapping -> mapping.getPatternParser() == null)                    .collect(Collectors.toList());            mappings.clear();            mappings.addAll(copy);        }        @SuppressWarnings("unchecked")        private List getHandlerMappings(Object bean) {            try {                Field field = ReflectionUtils.findField(bean.getClass(), "handlerMappings");                field.setAccessible(true);                return (List) field.get(bean);            } catch (IllegalArgumentException | IllegalAccessException e) {                throw new IllegalStateException(e);            }        }    };}

    OK,启动成功!

    补充:springboot集成swagger,启动时抛出如下错误:

    18:03:03.586 [main] INFO o.s.b.a.l.ConditionEvaluationReportLoggingListener -
    Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
    18:03:03.601 [main] ERROR o.s.b.d.LoggingFailureAnalysisReporter -

    ***************************
    APPLICATION FAILED TO START
    ***************************
    Description:
    Parameter 0 of method linkDiscoverers in org.springframework.hateoas.config.HateoasConfiguration required a single bean, but 15 were found:
    - modelBuilderPluginRegistry: defined in null
    - modelPropertyBuilderPluginRegistry: defined in null
    - typeNameProviderPluginRegistry: defined in null
    - documentationPluginRegistry: defined in null
    - apiListingBuilderPluginRegistry: defined in null
    - operationBuilderPluginRegistry: defined in null
    - parameterBuilderPluginRegistry: defined in null
    - expandedParameterBuilderPluginRegistry: defined in null
    - resourceGroupingStrategyRegistry: defined in null
    - operationModelsProviderPluginRegistry: defined in null
    - defaultsProviderPluginRegistry: defined in null
    - pathDecoratorRegistry: defined in null
    - relProviderPluginRegistry: defined by method 'relProviderPluginRegistry' in class path resource [org/springframework/hateoas/config/HateoasConfiguration.class]
    - linkDiscovererRegistry: defined in null
    - entityLinksPluginRegistry: defined by method 'entityLinksPluginRegistry' in class path resource [org/springframework/hateoas/config/WebMvcEntityLinksConfiguration.class]

    原因:

    swagger版本问题,我本地springboot版本是2.3.1,引用swaggerb版本为2.2.2,导致项目启动失败

    解决方案:

    更换swagger版本,我这里换成了2.9.2版本,项目启动成功

        io.springfox    springfox-swagger2    2.9.2    io.springfox    springfox-swagger-ui    2.9.2

    关于"Spring Boot 2.6.x整合Swagger启动失败报错如何解决"这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对"Spring Boot 2.6.x整合Swagger启动失败报错如何解决"知识都有一定的了解,大家如果还想学习更多知识,欢迎关注行业资讯频道。

    版本 方案 策略 整合 解决方案 项目 知识 执行器 配置 成功 内容 原因 文件 方法 篇文章 路径 问题 大佬 解铃还须系铃人 治标不治本 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 数据库营销管理过程 未来网络安全教育 网络安全运维工程师是什么 服务器同步时间影响业务吗 不懂软件成立软件开发公司 中职计算机网络技术整套试卷 沙暴服务器管理员 亚马逊云服务器 费用 在网上怎么看网络安全法 土地利用数据库编码有哪些 传奇服务器可以容纳多少人 小程序的数据库用的啥 数据库压线 软件开发的前台和后台运行 安装wps服务器 AU下载软件开发 黑龙江智能养老软件开发系统 明日之后电脑服务器连接中断 怀柔区自动软件开发调试 重庆鹿草堂互联网科技有限公司 腾讯云数据库怎么用 数据库建设的参考书 服务器同步时间影响业务吗 数据库中使用check约束 魔兽赛季服务器登录不上去 阳泉大屏导航软件开发公司 数据库 自联结模式 例子 数据库语言存储过程使用实例 林业网络安全等级保护 连接别人数据库连接超时
    0