问题记录-SpringBoot 2.7.2 整合 Swagger 报错

详细报错如下

报错背景,我将springboot从2.3.3升级到了2.7.2,报了下面的错误:

org.springframework.context.ApplicationContextException: Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerExceptionat org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:181) ~[spring-context-5.3.22.jar:5.3.22]at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:54) ~[spring-context-5.3.22.jar:5.3.22]at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:356) ~[spring-context-5.3.22.jar:5.3.22]at java.lang.Iterable.forEach(Iterable.java:75) ~[na:1.8.0_372]at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:155) ~[spring-context-5.3.22.jar:5.3.22]at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:123) ~[spring-context-5.3.22.jar:5.3.22]at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:935) ~[spring-context-5.3.22.jar:5.3.22]at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:586) ~[spring-context-5.3.22.jar:5.3.22]at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:147) ~[spring-boot-2.7.2.jar:2.7.2]at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:734) ~[spring-boot-2.7.2.jar:2.7.2]at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:408) ~[spring-boot-2.7.2.jar:2.7.2]at org.springframework.boot.SpringApplication.run(SpringApplication.java:308) ~[spring-boot-2.7.2.jar:2.7.2]at com.yong.TemplateApplication.main(TemplateApplication.java:35) [classes/:na]
Caused by: java.lang.NullPointerException: nullat springfox.documentation.spring.web.WebMvcPatternsRequestConditionWrapper.getPatterns(WebMvcPatternsRequestConditionWrapper.java:56) ~[springfox-spring-webmvc-3.0.0.jar:3.0.0]at springfox.documentation.RequestHandler.sortedPaths(RequestHandler.java:113) ~[springfox-core-3.0.0.jar:3.0.0]at springfox.documentation.spi.service.contexts.Orderings.lambda$byPatternsCondition$3(Orderings.java:89) ~[springfox-spi-3.0.0.jar:3.0.0]at java.util.Comparator.lambda$comparing$77a9974f$1(Comparator.java:469) ~[na:1.8.0_372]at java.util.TimSort.countRunAndMakeAscending(TimSort.java:355) ~[na:1.8.0_372]at java.util.TimSort.sort(TimSort.java:220) ~[na:1.8.0_372]at java.util.Arrays.sort(Arrays.java:1512) ~[na:1.8.0_372]at java.util.ArrayList.sort(ArrayList.java:1464) ~[na:1.8.0_372]at java.util.stream.SortedOps$RefSortingSink.end(SortedOps.java:392) ~[na:1.8.0_372]at java.util.stream.Sink$ChainedReference.end(Sink.java:258) ~[na:1.8.0_372]at java.util.stream.Sink$ChainedReference.end(Sink.java:258) ~[na:1.8.0_372]at java.util.stream.Sink$ChainedReference.end(Sink.java:258) ~[na:1.8.0_372]at java.util.stream.Sink$ChainedReference.end(Sink.java:258) ~[na:1.8.0_372]at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:483) ~[na:1.8.0_372]at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:472) ~[na:1.8.0_372]at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708) ~[na:1.8.0_372]at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[na:1.8.0_372]at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:566) ~[na:1.8.0_372]at springfox.documentation.spring.web.plugins.WebMvcRequestHandlerProvider.requestHandlers(WebMvcRequestHandlerProvider.java:81) ~[springfox-spring-webmvc-3.0.0.jar:3.0.0]at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193) ~[na:1.8.0_372]at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1384) ~[na:1.8.0_372]at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:482) ~[na:1.8.0_372]at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:472) ~[na:1.8.0_372]at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708) ~[na:1.8.0_372]at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[na:1.8.0_372]at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:566) ~[na:1.8.0_372]at springfox.documentation.spring.web.plugins.AbstractDocumentationPluginsBootstrapper.withDefaults(AbstractDocumentationPluginsBootstrapper.java:107) ~[springfox-spring-web-3.0.0.jar:3.0.0]at springfox.documentation.spring.web.plugins.AbstractDocumentationPluginsBootstrapper.buildContext(AbstractDocumentationPluginsBootstrapper.java:91) ~[springfox-spring-web-3.0.0.jar:3.0.0]at springfox.documentation.spring.web.plugins.AbstractDocumentationPluginsBootstrapper.bootstrapDocumentationPlugins(AbstractDocumentationPluginsBootstrapper.java:82) ~[springfox-spring-web-3.0.0.jar:3.0.0]at springfox.documentation.spring.web.plugins.DocumentationPluginsBootstrapper.start(DocumentationPluginsBootstrapper.java:100) ~[springfox-spring-web-3.0.0.jar:3.0.0]at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:178) ~[spring-context-5.3.22.jar:5.3.22]... 12 common frames omittedDisconnected from the target VM, address: '127.0.0.1:63816', transport: 'socket'Process finished with exit code 1

排查:
跟踪到时这里空指针WebMvcPatternsRequestConditionWrapper#getPatterns
在这里插入图片描述
这里之所以为空是因为,这里走了PATH_PATTERN_PARSER默认走的是这个策略:
在这里插入图片描述

走这个默认策略就会设置WebMvcAutoConfiguration#configurePathMatch,然后调用setPatternParser
在这里插入图片描述

然后子build逻辑的时候,如果patternParser不为空则走上面的分支,所以PatternsRequestCondition 不会赋值,所以下面使用就报错了空指针:
在这里插入图片描述
所以我们再结合上面,的分析我们追踪到可以通过配置改变这个策略,到此位置问题解决:

spring:mvc:pathmatch:matching-strategy: ant_path_matcher

但是为很好奇为什么springboot2.3.3就不会有这个问题呢?整合方式没有变呀,那只能去源码找答案了。你会发现你找不到MatchingStrategy,下面的代码如果不配置默认就是AntPathMatcher,到这里就明显了所以2.3.3没有报错。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/384655.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL练手 --- 1789. 员工的直属部门

题目链接:1789. 员工的直属部门 这道题虽然是个简单题,但是"坑"倒是不少,所以记录一下 思路: 题目要干: 一个员工可以属于多个部门。当一个员工加入超过一个部门的时候,他需要决定哪个部门是…

导航网站WP主题/WP黑格导航主题BlackCandy-简约酷黑色高逼格+焕然一新的UI设计

源码简介: 导航网站WP主题-WP黑格导航主题BlackCandy,它有着简约酷黑色高逼格,而且有焕然一新的UI设计。它是一个简约漂亮的 WordPress 自媒体主题。黑格网址导航主题,自适应电脑端和手机端。 BlackCandy-V2.0这次全新升级了&am…

mac M1安装Roop教程及所遇到的问题

1.安装miniconda,下载地址: 按 Python 版本划分的最新 Miniconda 安装程序链接:https://docs.anaconda.com/miniconda/miniconda-other-installer-links/ 下载后直接默认安装即可。 我用的是:Python3.10对应的Miniconda 2.下载…

哪个邮箱最安全最好用啊

企业邮箱安全至关重要,需保护隐私、防财务损失、维护通信安全、避免纠纷,并维持业务连续性。哪个企业邮箱最安全好用呢?Zoho企业邮箱,采用加密技术、反垃圾邮件和病毒保护,支持多因素认证,确保数据安全合规…

nodejs - express 学习笔记

express 是一个基于 Node.js 平台的极简、灵活的 WEB 应用开发框架,官方网址:https://www.expressjs. com.cn/ 简单来说,express 是一个封装好的工具包,封装了很多功能,便于我们开发 WEB 应用(HTTP 服务&am…

EasyMedia转码rtsp视频流flv格式,hls格式,H5页面播放flv流视频

EasyMedia转码rtsp视频流flv格式,hls格式 H5页面播放flv流视频 文章最后有源码地址 解决海康视频播放视频流,先转码后自定义页面播放flv视频流 先看效果,1,EasyMedia自带的页面,这个页面二次开发改动页面比较麻烦 …

秋叶大神中文版Stable Diffusion下载安装使用教程

Stable Diffusion是什么? Stable Diffusion是一款开源的AI绘画软件,于2022年发布,由CompVis、Stability AI和LAION的研究人员创建。该软件具有出色的图像生成功能,使用户能够从头开始绘制作品,也可以使用现有的图像进…

Sentinel限流规则详解

上一期教程讲解了 Sentinel 的快速入门:Sentinel快速入门,这一期主要讲述 Sentinel 的限流规则 簇点链路 簇点链路就是项目内的调用链路(Controller -> Service -> Mapper),链路中被监控的每个接口就是一个资源…

Jenkins+Maven+Gitlab+Tomcat自动化构建打包+部署

目录 环境准备 导入项目包 配置jenkins 构建项目 配置项目上线 修改项目代码测试 环境准备 本实操项目环境基于https://blog.csdn.net/Lzcsfg/article/details/140359830 首先在node01主机中操作,本次操作需要java8的版本,将之前安装的java17卸…

Shell编程之正则表达式与文本三剑客

目录 一、正则表达式 1.引言--什么是正则表达式 1.1正则表达式的功能 2.基础正则表达式(BRE) 2.1特殊字符 2.2定位符 2.3非打印字符 3.扩展正则表达式(ERE) 4.元字符操作的案列 二、命令小工具 1.cut:列截取工具 2.sort排序 …

请你谈谈:spring bean的生命周期 - 阶段5:BeanPostProcessor前置处理-自定义初始化逻辑-BeanPostProcess后置处理

BeanPostProcessor的postProcessBeforeInitialization方法是在bean的依赖注入(即属性填充)完成后,但在bean的初始化回调(如PostConstruct注解的方法或InitializingBean接口的afterPropertiesSet方法)之前被调用的。 具…

大数据管理中心设计规划方案(可编辑的43页PPT)

引言:随着企业业务的快速发展,数据量急剧增长,传统数据管理方式已无法满足高效处理和分析大数据的需求。建立一个集数据存储、处理、分析、可视化于一体的大数据管理中心,提升数据处理能力,加速业务决策过程&#xff0…

Hive3:Hive初体验

1、创建表 CREATE TABLE test(id INT, name STRING, gender STRING);2、新增数据 INSERT INTO test VALUES(1, 王力红, 男); INSERT INTO test VALUES(2, 钉钉盯, 女); INSERT INTO test VALUES(3, 咔咔咔, 女);3、查询数据 简单查询 select * from test;带聚合函数的查询 …

自动驾驶-机器人-slam-定位面经和面试知识系列01之常考公式推导(01)

李群李代数扰动bundle adjustment 这个博客系列会分为C STL-面经、常考公式推导和SLAM面经面试题等三个系列进行更新,基本涵盖了自己秋招历程被问过的面试内容(除了实习和学校项目相关的具体细节)。在知乎和牛客也会同步更新,全网…

IDEA-安装插件 驼峰下划线转换

第一步:安装 file-settings-plugins-在marketplace搜索“CamelCase”-点击安装 第二步:设置 file-settings-editor-camel_case 第三步:使用 选中想转换的遍历 使用快捷键 Alt Shift U

Linux中tomcat下载教程

一.安装tomcat 1.安装 EPEL 仓库: sudo yum install epel-release2.安装 Tomcat: sudo yum install tomcat3.启动 Tomcat 服务: sudo systemctl start tomcat4.启用 Tomcat 服务开机启动: sudo systemctl enable tomcat5.检查…

Java | Leetcode Java题解之第283题移动零

题目&#xff1a; 题解&#xff1a; class Solution {public void moveZeroes(int[] nums) {int n nums.length, left 0, right 0;while (right < n) {if (nums[right] ! 0) {swap(nums, left, right);left;}right;}}public void swap(int[] nums, int left, int right)…

ElasticSearch(三)—文档字段参数设置以及元字段

一、 字段参数设置 analyzer&#xff1a; 指定分词器。elasticsearch 是一款支持全文检索的分布式存储系统&#xff0c;对于 text类型的字段&#xff0c;首先会使用分词器进行分词&#xff0c;然后将分词后的词根一个一个存储在倒排索引中&#xff0c;后续查询主要是针对词根…

如何通过netsh命令重启主机网卡?

正文共&#xff1a;999 字 15 图&#xff0c;预估阅读时间&#xff1a;1 分钟 不知道各位遇到过没有&#xff0c;VMware Workstation的NAT网卡经常出现一种情况&#xff1a;在虚拟机里面访问外部网络还是正常的&#xff0c;但是从宿主机却访问不到虚拟机。 说实话&#xff0c;这…

el-upload照片墙自定义上传多张图片(手动一次性上传多张图片)包含图片回显,删除

需求&#xff1a;el-upload照片墙自定义上传多张图片&#xff08;手动一次性上传多张图片&#xff09;包含图片回显&#xff0c;删除&#xff0c;预览&#xff0c;在网上看了很多&#xff0c;都没有说怎么把数据转为file格式的&#xff0c;找了很久最终实现&#xff0c; 难点&a…