前言
Swagger
是一个规范和完整的框架,用于生成、描述、调用和可视化RESTful风格
的Web服务
。
总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法、参数和模型紧密集成到服务器端的代码,允许API
来始终保持同步。Swagger
让部署管理和使用功能强大的API
从未如此简单。
引入依赖
1 2 3 4 5 6 7 8 9 10
| <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>
|
创建Swagger配置类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import springfox.documentation.builders.ApiInfoBuilder; import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.RequestHandlerSelectors; import springfox.documentation.service.ApiInfo; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration @EnableSwagger2 public class SwaggerConfig {
@Bean public Docket createRestApi() { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) .select() .apis(RequestHandlerSelectors.basePackage("com.smart.demo.controller")) .paths(PathSelectors.any()) .build(); }
private ApiInfo apiInfo() { return new ApiInfoBuilder() .title("测试Demo项目API") .description("测试Demo项目SwaggerAPI管理") .termsOfServiceUrl("") .version("1.0") .build(); } }
|
访问测试
访问链接1:http://localhost:8080/swagger-ui.html
访问链接2:http://127.0.0.1:8080/swagger-ui/index.html
遇到的问题
问题1
Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException
原因:Swagger停更,导致其默认配置下对于高版本的SpringBoot
的不兼容
- SpringBoot版本 >= 2.6.x默认匹配策略为
path-pattern-matcher
- SpringBoot版本 < 2.6.x默认匹配策略为
ant-path-matcher
- 解决方案1:降低SpringBoot版本
降低SpringBoot版本,SpringBoot版本<=2.5.6
1 2 3 4 5 6
| <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.5.5</version> <relativePath/> </parent>
|
- 解决方案2:修改匹配策略
在 application.yml
配置文件添加配置
1 2 3 4
| spring: mvc: pathmatch: matching-strategy: ant_path_matcher
|
- 解决方案3:修改Swagger配置类
修改Swagger配置类,在SwaggerConfig类
上加注解@EnableWebMvc
1 2 3 4 5 6
| @Configuration @EnableSwagger2 @EnableWebMvc public class SwaggerConfig { ...... }
|
关于Swagger的兼容问题