一、使用@Profile
使用注解@Profile({“dev”,“test”})
表示在开发或测试环境开启,而在生产关闭。
@Configuration
@EnableSwagger2
@Profile({"local", "dev"})
public class SwaggerConfig {
private String title;
private String desc;
private String version;
private String groupName;
private String basePackage;
private String lang;
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title(title)
.description(desc)
.version(version)
.build();
}
@Bean
public Docket swaggerApi() {
// 指定生成的文档的类型是Swagger2
return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo())
.securityContexts(securityContexts())
.securitySchemes(securitySchemes())
.groupName(null)
.directModelSubstitute(LocalDate.class, String.class).genericModelSubstitutes(ResponseEntity.class)
.useDefaultResponseMessages(false)
// 指定扫描包路径
.forCodeGeneration(true).select()
.apis(RequestHandlerSelectors.basePackage(basePackage))
.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
.paths(PathSelectors.any())
.build();
}
public List<ApiKey> securitySchemes() {
List<ApiKey> apiKeys = new ArrayList<>();
apiKeys.add(new ApiKey("Authorization", "Authorization", "header"));
return apiKeys;
}
public List<SecurityContext> securityContexts() {
List<SecurityContext> securityContexts = new ArrayList<>();
securityContexts.add(SecurityContext.builder()
.securityReferences(securityReferences())
.forPaths(PathSelectors.any()).build());
return securityContexts;
}
public List<SecurityReference> securityReferences() {
AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
authorizationScopes[0] = new AuthorizationScope("global", "accessEverything");
List<SecurityReference> securityReferences = new ArrayList<>();
securityReferences.add(new SecurityReference("Authorization", authorizationScopes));
return securityReferences;
}
}
二、使用@ConditionalOnProperty
使用注解 @ConditionalOnProperty(prefix = "swagger", name = "open", havingValue = "true")
@Configuration
@EnableSwagger2
@ConfigurationProperties(prefix = "swagger")
@ConditionalOnProperty(prefix = "swagger", name = "open", havingValue = "true")
public class SwaggerConfig {
private String title;
private String desc;
private String version;
private String groupName;
private String basePackage;
private String lang;
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title(title)
.description(desc)
.version(version)
.build();
}
@Bean
public Docket swaggerApi() {
// 指定生成的文档的类型是Swagger2
return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo())
.securityContexts(securityContexts())
.securitySchemes(securitySchemes())
.groupName(null)
.directModelSubstitute(LocalDate.class, String.class).genericModelSubstitutes(ResponseEntity.class)
.useDefaultResponseMessages(false)
// 指定扫描包路径
.forCodeGeneration(true).select()
.apis(RequestHandlerSelectors.basePackage(basePackage))
.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
.paths(PathSelectors.any())
.build();
}
public List<ApiKey> securitySchemes() {
List<ApiKey> apiKeys = new ArrayList<>();
apiKeys.add(new ApiKey("Authorization", "Authorization", "header"));
return apiKeys;
}
public List<SecurityContext> securityContexts() {
List<SecurityContext> securityContexts = new ArrayList<>();
securityContexts.add(SecurityContext.builder()
.securityReferences(securityReferences())
.forPaths(PathSelectors.any()).build());
return securityContexts;
}
public List<SecurityReference> securityReferences() {
AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
authorizationScopes[0] = new AuthorizationScope("global", "accessEverything");
List<SecurityReference> securityReferences = new ArrayList<>();
securityReferences.add(new SecurityReference("Authorization", authorizationScopes));
return securityReferences;
}
}
添加 swagger.yml 配置文件,或添加配置到 bootstrap.yml
swagger:
open: true
title: 开发接口文档
desc: 微服务接口定义
version: 1.0
groupName: 分析
basePackage: com.abc.test.controller
lang: zh-cn