package com.doumee.config.swagger;
|
|
import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
|
import com.google.common.base.Function;
|
import com.google.common.base.Optional;
|
import org.springframework.beans.factory.annotation.Value;
|
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.oas.annotations.EnableOpenApi;
|
import springfox.documentation.service.ApiInfo;
|
import springfox.documentation.spi.DocumentationType;
|
import springfox.documentation.spring.web.plugins.Docket;
|
|
import java.util.function.Predicate;
|
|
/**
|
* Swagger配置
|
* @author Eva.Caesar Liu
|
* @date 2022/03/11 10:24
|
*/
|
@Configuration
|
@EnableOpenApi
|
@EnableKnife4j
|
public class SwaggerConfig {
|
|
@Value("${swagger.host:}")
|
private String host;
|
@Value("${swagger.enabled:}")
|
private Boolean enabled;
|
|
@Value("${swagger.title:接口文档}")
|
private String title;
|
|
@Value("${swagger.description:}")
|
private String description;
|
|
@Value("${project.version:}")
|
private String version;
|
|
@Bean
|
public ApiInfo getApiInfo() {
|
return new ApiInfoBuilder()
|
.title(title)
|
.description(description)
|
.version(version)
|
.build();
|
}
|
@Bean
|
public Docket getDocket2() {
|
return new Docket(DocumentationType.SWAGGER_2)
|
.apiInfo(this.getApiInfo()).groupName("default")
|
.host(host)
|
.enable(enabled)
|
.select()
|
.apis( basePackage("com.doumee.api.gateway;"))
|
// 设置需要被扫描的类,这里设置为添加了@Api注解的类
|
// .apis(RequestHandlerSelectors.withClassAnnotation(Api.class))
|
.paths(PathSelectors.any())
|
.build();
|
}
|
|
/**
|
* 重写basePackage方法,使能够实现多包访问,复制贴上去
|
* @author teavamc
|
* @date 2019/1/26
|
* @return com.google.common.base.Predicate<springfox.documentation.RequestHandler>
|
*/
|
public static Predicate<RequestHandler> basePackage(String basePackage) {
|
return input -> declaringClass(input).transform(handlerPackage(basePackage)).or(true);
|
}
|
|
private static Function<Class<?>, Boolean> handlerPackage(String basePackage) {
|
return input -> {
|
// 循环判断匹配
|
for (String strPackage : basePackage.split(";")) {
|
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());
|
}
|
}
|