集成swagger后出现Failed to start bean 'documentationPluginsBootstrapper'
SpringBoot集成swagger后出现Failed to start bean ‘documentationPluginsBootstrapper’; nested exception is java.lang.NullPointerException
之前就出现过创建SpringBoot项目集成swagger问题,今天又遇到了,就来写一下提供一下几种解决办法。
1、bug重现
当前遇到报错的环境是:SpringBoot版本为2.7.8,集成的swagger版本为2.9.2(最新版本已经更新到3.0.0了)
//SpringBoot版本号
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.8</version>
</parent>
//swagger2 版本号
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
2、报错原因分析
SpringBoot 2.6及以上版本做了迭代,Spring Boot 2.6.X使用的是PathPatternMatcher,而Springfox 使用的路径匹配是基于AntPathMatcher的。
3、解决方案
①方案一:更改Spring Boot 版本到2.6.x以下版本
Spring Boot版本 | Swagger 版本 |
---|---|
2.5.6 | 2.9.2 |
2.3.12.RELEASE | 2.9.2 |
之前创建项目时,为了项目包不冲突,创建的SpringBoot版本是 2.3.12.RELEASE,集成的swagger版本是2.9.2,这样的搭配是没有问题的。
//SpringBoot版本号
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.12.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
//swagger2 版本号
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
②方案二:不更改Spring Boot 版本
Spring Boot版本 | Swagger 版本 |
---|---|
2.5.6 | 3.0.0 |
2.7.8 | 2.9.2 |
第一种组合:我是借鉴网友:https://blog.csdn.net/cxclll/article/details/126745903
但我发现里面有一个类引不进来(不知道是不是我环境的原因),出于懒,我就想到了一个折中的方法,下面讲。
第二种组合是:
当前项目 SpringBoot 版本是2.7.8,集成的 swagger 版本是2.7.0的版本。
swagger 2.7版本跟最新的也就是样式和交互上的区别,2.9.2 要更扁平化一些。
//SpringBoot版本号
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.8</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
//swagger2 版本号
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.7.0</version>
</dependency>
然后在项目的resource目录下的 *.yaml 文件中加上:
spring.mvc.pathmatch.matching-strategy: ant_path_matcher
现在 Springboot 和 SpringCloud 的配置文件大多都是yaml文件,用上面这种输入可以自动匹配格式。