- 搭建SpringBoot项目,这里就省略了,相信小伙伴使用脚手架的能力,一定会非常快的创建好一个SpringBoot项目
- 打开项目的 pom.xml 文件, 在 pom.xml 文件中添加 swagger 依赖 及swagger-ui 依赖
<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 配置类, 添加注解 @Configuration (声明配置文件) 和 @EnableSwagger2(开启Swagger)
@Configuration
@EnableSwagger2
public class Swagger2Config{
/**
* 功能描述:创建API的基本信息,这些信息会在Swagger UI中进行显示
*/
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("API文档标题")
.description("项目接口文档")
.contact(new Contact("XX有限公司", "url", "email"))
.version("1.0")
.build();
}
/**
* 功能描述:创建API基本信息
*/
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo()).enable(true)
.select()
.apis(RequestHandlerSelectors.basePackage("com.project.test"))
.paths(PathSelectors.any())
.build();
}
}
- 启动SpringBoot 项目后, 输入 localhost:8080/project/swagger-ui.html 后可以看到如下图, 表示swagger加载成功。
- 但有时候,这个会扫描很多无用的API,影响我们查看及开发,我们可能会让swagger扫描多个自定义的包下的API,这个时候该如何处理呢?其实很简单
我们分析源码后,就会明白他是如何加载的,我们重新写加载的方法就可以了, 接下来我们修改 Swagger2Config.class 配置类
/**
* 创建API基本信息
*/
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo()).enable(true)
.select()
//我们让其只扫描 订单包和用户相关的 API
.apis(basePackage("com.project.test.order;com.project.test.user"))
.paths(PathSelectors.any())
.build();
}
public static Predicate<RequestHandler> basePackage(final String basePackage) {
return input -> declaringClass(input).transform(handlerPackage(basePackage)).or(true);
}
private static Function<Class<?>, Boolean> handlerPackage(final String basePackage) {
return input -> {
// 循环判断匹配
for (String strPackage : basePackage.split(CommonConstants.SEMICOLON_REGEX)) {
boolean isMatch = input.getPackage().getName().startsWith(strPackage);
if (isMatch) {
return true;
}
}
return false;
};
}
private static Optional<? extends Class<?>> declaringClass(RequestHandler input) {
return Optional.fromNullable(input.declaringClass());
}
- 我们重新启动项目后,重新访问 localhost:8080/project/swagger-ui.html 会发现 比之前扫描的结果会少一部分,这次只扫描出了我们配置包下的API
- 有些小伙伴(尤其是前端的小伙伴)可能会觉得 这个界面风格看起来不直观,不清晰,没关系, 我们可以使用比较流行的 bootstrap 风格,添加其实很简单, 我们在 pom.xml 文件中添加如下代码
<!-- 引入swagger-bootstrap-ui包 -->
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>swagger-bootstrap-ui</artifactId>
<version>1.8.5</version>
</dependency>
在之前的配置类中添加注解
@Configuration
@EnableSwagger2
@EnableSwaggerBootstrapUI
public class Swagger2Config{
}
- 重新项目后,这次我们访问 localhost:8080/project/doc.html (原有的界面还保留着)可以看到如下界面
这样的界面是不是很漂亮,而且非常直观。
至此,相关 swagger 与 springboot 的集成就完成了。希望对小伙伴有帮助。