问题描述 :在Maven聚合工程中配置Swagger的:Failed to start bean ‘documentationPluginsBootstrapper问题
Swagger:
前后端分离开发,后端需要编写接⼝说明⽂档,会耗费⽐较多的时间
swagger
是⼀个⽤于⽣成服务器接⼝的规范性⽂档、并且能够对接⼝进⾏测试的⼯具
作用:
1.生成接口说明文档
2.对接口进行测试
添加依赖:
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
controller:
GoodsController:
package com.qfedu.fmmall.controller;
import com.qfedu.fmmall.vo.ResultVO;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
/**
* @author :weimo
* @date :Created in 2022/5/31
* @description:
*/
@Controller
@RequestMapping("/goods")
public class GoodsController {
@RequestMapping(value = "/add",method = RequestMethod.POST)
public ResultVO addGoods(){
return null;
}
@RequestMapping(value = "/delete",method = RequestMethod.DELETE)
public ResultVO deleteGoods(){
return null;
}
@RequestMapping(value = "/update",method = RequestMethod.PUT)
public ResultVO updateGoods(){
return null;
}
@RequestMapping(value = "/list",method = RequestMethod.GET)
public ResultVO listGoods(){
return null;
}
}
UserController:
package com.qfedu.fmmall.controller;
import com.qfedu.fmmall.vo.ResultVO;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
/**
* @author :weimo
* @date :Created in 2022/5/31
* @description:
*/
@Controller
@RequestMapping("/goods")
public class GoodsController {
@RequestMapping(value = "/add",method = RequestMethod.POST)
public ResultVO addGoods(){
return null;
}
@RequestMapping(value = "/delete",method = RequestMethod.DELETE)
public ResultVO deleteGoods(){
return null;
}
@RequestMapping(value = "/update",method = RequestMethod.PUT)
public ResultVO updateGoods(){
return null;
}
@RequestMapping(value = "/list",method = RequestMethod.GET)
public ResultVO listGoods(){
return null;
}
}
在子工程创建swagger的配置(java配置方式)
package com.qfedu.fmmall.config;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Controller;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
/**
* @author :weimo
* @date :Created in 2022/5/31
* @description:
*/
@Controller
@EnableSwagger2
public class SwaggerConfig {
/*swagger会帮助我们生成接口文档
* 1:配置文档信息
* 2:配置生成规则
*/
@Bean
public Docket getDocket(){
//指定文档风格
//创建封面信息对象
ApiInfoBuilder apiInfoBuilder= new ApiInfoBuilder();
apiInfoBuilder.title("《峰迷商城》后端接口说明")
.description("此文档详细说明了峰迷商城项目后端接口规范....")
.contact(new Contact("亮哥","www.liangge.com","liangge@wang.com"));
ApiInfo apiInfo = apiInfoBuilder.build();
Docket docket = new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo) //指定生成的文档封面信息:文档标题,版本,作者
.select()
.apis(RequestHandlerSelectors.basePackage("com.qfedu.fmmall.controller"))
.paths(PathSelectors.any())
.build();
return docket;
}
}
问题出现:运行之后出现Failed to start bean ‘documentationPluginsBootstrapper
解决方法:
在application.properties文件中添加配置
spring.mvc.pathmatch.matching-strategy=ANT_PATH_MATCHER
如果是application.yml则添加
spring:
mvc:
pathmatch:
matching-strategy: ANT_PATH_MATCHER
项目启动成功:
输入
http://localhost:8080/swagger-ui.html
成功
问题出现原因:
springboot版本问题:
这是因为Springfox使用的路径匹配是基于AntPathMatcher的,而Spring Boot 2.6.X使用的是PathPatternMatcher。2.6.0开始使用基于PathPatternParser的路径匹配,而Springfox版本一直没有更新还是使用的AntPathMatcher导致了这个问题
其他解决方法:
1. 将springboot降级到2.5.7,但这也只是暂时解决问题的办法,不是长久之计;
2. 从SpringFox迁移到SpringDoc,这种方式虽然可以处理问题,但对于已经上线的项目来说改动量还是有点大。
3.新增依赖:guava
<!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>25.1-jre</version>
</dependency>
这个问题要具体看swagger2的版本,最新版的可能需要更新最新版的guava。