package cn.besteam.config;
|
|
import cn.besteam.common.api.vo.Result;
|
import cn.besteam.common.constant.CommonConstant;
|
import com.fasterxml.classmate.TypeResolver;
|
import com.google.common.base.Predicate;
|
import io.swagger.annotations.ApiOperation;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Configuration;
|
import org.springframework.web.context.request.async.DeferredResult;
|
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
|
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
import springfox.documentation.builders.ApiInfoBuilder;
|
import springfox.documentation.builders.ParameterBuilder;
|
import springfox.documentation.builders.PathSelectors;
|
import springfox.documentation.builders.RequestHandlerSelectors;
|
import springfox.documentation.schema.AlternateTypeRule;
|
import springfox.documentation.schema.ModelRef;
|
import springfox.documentation.schema.WildcardType;
|
import springfox.documentation.service.Contact;
|
import springfox.documentation.service.Parameter;
|
import springfox.documentation.spi.DocumentationType;
|
import springfox.documentation.spring.web.plugins.Docket;
|
import springfox.documentation.swagger2.annotations.EnableSwagger2;
|
|
import java.sql.Timestamp;
|
import java.util.ArrayList;
|
import java.util.Date;
|
import java.util.List;
|
|
import static springfox.documentation.schema.AlternateTypeRules.newRule;
|
|
/**
|
* @author scott
|
*/
|
@Slf4j
|
@Configuration
|
@EnableSwagger2
|
public class Swagger2Config implements WebMvcConfigurer {
|
|
@Autowired
|
private TypeResolver typeResolver;
|
|
@Autowired
|
private SysEnv sysEnv;
|
|
/**
|
* 显示swagger-ui.html文档展示页,还必须注入swagger资源:
|
*
|
* @param registry
|
*/
|
@Override
|
public void addResourceHandlers(ResourceHandlerRegistry registry) {
|
|
registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
|
registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
|
}
|
|
@Bean
|
public Docket api() {
|
|
MyDocket md = new MyDocket("1.移动端接口");
|
if (sysEnv.isGenApi()) {
|
// 不包含/ops接口
|
return md.open("cn.besteam.modules", rule(), PathSelectors.ant("/api/**"));
|
} else {
|
return md.close();
|
}
|
}
|
|
@Bean
|
public Docket backend() {
|
|
MyDocket md = new MyDocket("2.后台接口");
|
if (sysEnv.isGenApi()) {
|
return md.open("cn.besteam.modules", rule(), PathSelectors.regex("^((?!/api).)*$"));
|
} else {
|
return md.close();
|
}
|
}
|
|
private AlternateTypeRule rule() {
|
|
return newRule(typeResolver.resolve(DeferredResult.class, typeResolver.resolve(Result.class, WildcardType.class)), typeResolver.resolve(WildcardType.class));
|
}
|
|
/**
|
* 自定义配置类
|
*/
|
static class MyDocket extends Docket {
|
|
public MyDocket(String groupName) {
|
|
super(DocumentationType.SWAGGER_2);
|
this.groupName(groupName);
|
this.apiInfo(new ApiInfoBuilder().title("医疗废物平台接口").description("").contact(new Contact("智云启服全体优秀程序员", "https://www.besteam.cn/", "")).version("1.0").build());
|
}
|
|
public Docket open(String basePackage, AlternateTypeRule rule, Predicate<String> pathSelector) {
|
|
return this.select().apis(RequestHandlerSelectors.basePackage(basePackage)).apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)).paths(pathSelector).build().pathMapping("/").directModelSubstitute(Date.class, String.class).directModelSubstitute(Timestamp.class, String.class).alternateTypeRules(rule).globalOperationParameters(setHeaderToken()).useDefaultResponseMessages(false);
|
}
|
|
/**
|
* 公共token头部参数
|
*
|
* @return
|
*/
|
private List<Parameter> setHeaderToken() {
|
|
ParameterBuilder tokenPar = new ParameterBuilder();
|
List<Parameter> pars = new ArrayList<>();
|
tokenPar.name(CommonConstant.X_ACCESS_TOKEN).description("token").modelRef(new ModelRef("string")).parameterType("header").required(false).build();
|
pars.add(tokenPar.build());
|
return pars;
|
}
|
|
/**
|
* 关闭文档
|
*
|
* @return
|
*/
|
public Docket close() {
|
|
return this.select().apis(RequestHandlerSelectors.none()).build();
|
}
|
|
}
|
|
}
|