Swagger--配置扫描接口及开关
Posted Z && Y
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Swagger--配置扫描接口及开关相关的知识,希望对你有一定的参考价值。
01: Swagger–介绍及SpringBoot集成Swagger
02: Swagger–配置Swagger信息
03: Swagger–配置扫描接口及开关
04: Swagger–分组 & 接口注释
05: Swagger–接口测试&Swagger小结
1. Swagger--配置扫描接口及开关
1.1 配置扫描接口
SwaggerConfig.java
/**
* 配置docket以配置Swagger具体参数
*/
@Bean
public Docket docket() {
/*
* 通过.select()方法,去配置扫描接口,RequestHandlerSelectors配置如何扫描接口
* basePackage(final String basePackage) // 根据包路径扫描接口(最常用)
* any() 扫描所有,项目中的所有接口都会被扫描到
* none() 不扫描接口
* 通过方法上的注解扫描,如withMethodAnnotation(GetMapping.class)只扫描get请求
* withMethodAnnotation(final Class<? extends Annotation> annotation)
* 通过类上的注解扫描,如.withClassAnnotation(Controller.class)只扫描有controller注解的类中的接口
* withClassAnnotation(final Class<? extends Annotation> annotation)
*/
return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select().apis(RequestHandlerSelectors.basePackage("com.tian.swagger.controller")).build();
}
运行结果(因为现在只扫描了com.tian.swagger.controller 的包 所以只会有一个HelloController):
1.2 配置接口扫描过滤
SwaggerConfig.java
/**
* 配置docket以配置Swagger具体参数
*/
@Bean
public Docket docket() {
/*
* 通过.select()方法,去配置扫描接口,RequestHandlerSelectors配置如何扫描接口
* basePackage(final String basePackage) // 根据包路径扫描接口
* any() 扫描所有,项目中的所有接口都会被扫描到
* none() 不扫描接口
* 通过方法上的注解扫描,如withMethodAnnotation(GetMapping.class)只扫描get请求
* withMethodAnnotation(final Class<? extends Annotation> annotation)
* 通过类上的注解扫描,如.withClassAnnotation(Controller.class)只扫描有controller注解的类中的接口
* withClassAnnotation(final Class<? extends Annotation> annotation)
*/
return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select().apis(RequestHandlerSelectors.basePackage("com.tian.swagger.controller")).paths(PathSelectors.ant("/tian/**")).build();
}
这里只选择了请求路径包含了/tian下的所有接口
这里可以选择的参数有:
- any() // 任何请求都扫描
- none() // 任何请求都不扫描
- regex(final String pathRegex) // 通过正则表达式控制
- ant(final String antPattern) // 通过ant()控制
1.3 配置Swagger开关
enable(boolean) 表示是否启用Swagger 默认为true(启用) 如果为false,则Swagger不能在游览器中访问
SwaggerConfig.java
/**
* 配置docket以配置Swagger具体参数
*/
@Bean
public Docket docket() {
// enable(boolean) 表示是否启用Swagger 默认为true(启用) 如果为false,则Swagger不能在游览器中访问
return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).enable(false).select().apis(RequestHandlerSelectors.basePackage("com.tian.swagger.controller")).paths(PathSelectors.ant("/tian/**")).build();
}
运行结果:
1.4 我只希望我的Swagger在生产环境中使用,在发布的时候不使用。怎么实现?
-
- 判断是不是生产环境,是则 flag = false,否则 flag = true
-
- 注入enable(flag)
1.4.1 准备工作,新建2个配置文件
application.properties
spring.profiles.active=dev
application-dev.properties
server.port=8081
application-pro.properties
server.port=8082
1.4.2 代码实现
SwaggerConfig.java
/**
* 配置docket以配置Swagger具体参数
*/
@Bean
// org.springframework.core.env.Environment
public Docket docket(Environment environment) {
// 设置要显示swagger的环境 这里是 dev 和 test 环境
// org.springframework.core.env.Profiles
Profiles profiles = Profiles.of("dev", "test");
// 判断当前是否处于该环境
// 通过 enable() 接收此参数判断是否要显示
boolean flag = environment.acceptsProfiles(profiles);
// enable(boolean) 表示是否启用Swagger 默认为true(启用) 如果为false,则Swagger不能在游览器中访问
return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).enable(flag).select().apis(RequestHandlerSelectors.basePackage("com.tian.swagger.controller")).paths(PathSelectors.ant("/tian/**")).build();
}
启动测试01:Profiles 里面包含 dev
启动测试01:Profiles 里面不包含 dev
Profiles profiles = Profiles.of("test");
以上是关于Swagger--配置扫描接口及开关的主要内容,如果未能解决你的问题,请参考以下文章
[Swagger2]Swaggr配置扫描接口&&配置Swagger开关