swagger多包扫描
在项目中swagger的接口文档使用的还是很方便的,swagger有很多中扫描接口的方式,可以自行的配置
但是swagger配置通过包扫描的方式时,而当我们想要扫描多个包的时候,就发现,swagger给的api当中只有一个string参数,就很不方便
所以自行寻找了一些配置多包扫描的方式
首先需要导入guava依赖包
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>31.1-jre</version>
</dependency>
然后开始配置
import com.google.common.base.Function;
import com.google.common.base.Optional;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.RequestHandler;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import java.util.function.Predicate;
@Configuration
public class SwaggerConfig
@Bean
public Docket createRestApi()
{
return new Docket(DocumentationType.OAS_30)
// 用来创建该API的基本信息,展示在文档的页面中(自定义展示的信息)
.apiInfo(apiInfo())
// 设置哪些接口暴露给Swagger展示
.select()
// 扫描指定包的接口
// 只支持一个包路径
//.apis(RequestHandlerSelectors.basePackage("com.xxx.xxx"))
// 多包扫描
.apis(basePackage("com.xxx.xxx1", "com.xxx.xxx2"))
// 扫描所有 .apis(RequestHandlerSelectors.any())
.paths(PathSelectors.any())
.build();
}
private static Predicate<RequestHandler> basePackage(String... basePackages) {
return input -> declaringClass(input).transform(handlerPackage(basePackages)).or(true);
}
private static Optional<? extends Class<?>> declaringClass(RequestHandler input) {
return Optional.fromNullable(input.declaringClass());
}
private static Function<Class<?>, Boolean> handlerPackage(String[] basePackage) {
return input -> {
// 循环判断匹配
for (String strPackage : basePackage) {
boolean isMatch = input.getPackage().getName().startsWith(strPackage);
if (isMatch) {
return true;
}
}
return false;
};
}
/**
* 添加摘要信息
*/
private ApiInfo apiInfo() {
// 用ApiInfoBuilder进行定制
return new ApiInfoBuilder()
// 设置标题
.title("标题:xxx系统_接口文档")
// 描述
.description("描述:用于管理xxxxx信息,具体包括XXX,XXX模块...")
// 作者信息
.contact(new Contact("xxxx", null, null))
// 版本
.version("版本号:" + "1.0")
.build();
}