Swagger 2 @ApiIgnore 属性在配置服务器中切换
Swagger 2 @ApiIgnore properties toggle in config server
我在 Springngboot 应用程序中使用 swagger 2 (2.9.2)。
依赖关系:
<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
代码:
package com.khan.vaquar.swagger;
import static com.google.common.base.Predicates.or;
import static springfox.documentation.builders.PathSelectors.regex;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.google.common.base.Predicate;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket postsApi() {
return new Docket(DocumentationType.SWAGGER_2).groupName("vaquar khan public-api").apiInfo(apiInfo()).select().apis( RequestHandlerSelectors.basePackage( "com.khan.vaquar" ) )
.paths(paths()).build();
}
private Predicate<String> paths() {
return or(regex("/.*"), regex("/.*"));
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder().title("vaquar khan public-api")
.description("vaquar khan public-api app API reference for developers")
.termsOfServiceUrl("XXX-YYY-ZZZ.com").contact("info@vkhan.com")
.license("vaquar khan License").licenseUrl("Licence@vkhan.com").version("1.0").build();
}
}
我有将近 70 个不同的微服务,很多是内部的,只有少数 10 个微服务是外部的。
现在在 swagger 文档中使用 @ApiIgnore 隐藏微服务,我们在 swagger 中忽略了 60 并且只显示 10 个外部 api.
问题:
现在我要求外部用户只能在 swagger 文档中看到 10 个微服务,而内部微服务 swagger (70) 应该对开发人员和内部用户可见。
我们有什么方法可以在应用程序属性中定义 @ApiIgnore 以仅显示 10 并在开发配置属性中隐藏 @ApiIgnore
如果您使用配置文件,则不需要 @ApiIgnore
注释。
定义开发者资料。例如:
@Profile("dev")
@Controller
@RequestMapping("/internal/...")
@Api(value = "/internal/...", description = "Internal stuff")
public class OneOfTheInternalControllers { ... }
现在用配置文件标记所有内部控制器/端点。最后,如果您 运行 您的应用程序处于生产模式,则您无需执行任何操作。 @Profile("dev")
API 将被隐藏。但是,如果您 运行 您的应用程序在本地或在测试环境中,请传递以下 JVM 参数:
-Dspring.profiles.active=dev
如果您使用的是 IntelliJ,则可以在 Run/Debug 配置中传递它:
最后,您应该以开发人员的身份看到所有 API。
我在 Springngboot 应用程序中使用 swagger 2 (2.9.2)。
依赖关系:
<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
代码:
package com.khan.vaquar.swagger;
import static com.google.common.base.Predicates.or;
import static springfox.documentation.builders.PathSelectors.regex;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.google.common.base.Predicate;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket postsApi() {
return new Docket(DocumentationType.SWAGGER_2).groupName("vaquar khan public-api").apiInfo(apiInfo()).select().apis( RequestHandlerSelectors.basePackage( "com.khan.vaquar" ) )
.paths(paths()).build();
}
private Predicate<String> paths() {
return or(regex("/.*"), regex("/.*"));
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder().title("vaquar khan public-api")
.description("vaquar khan public-api app API reference for developers")
.termsOfServiceUrl("XXX-YYY-ZZZ.com").contact("info@vkhan.com")
.license("vaquar khan License").licenseUrl("Licence@vkhan.com").version("1.0").build();
}
}
我有将近 70 个不同的微服务,很多是内部的,只有少数 10 个微服务是外部的。
现在在 swagger 文档中使用 @ApiIgnore 隐藏微服务,我们在 swagger 中忽略了 60 并且只显示 10 个外部 api.
问题:
现在我要求外部用户只能在 swagger 文档中看到 10 个微服务,而内部微服务 swagger (70) 应该对开发人员和内部用户可见。
我们有什么方法可以在应用程序属性中定义 @ApiIgnore 以仅显示 10 并在开发配置属性中隐藏 @ApiIgnore
如果您使用配置文件,则不需要 @ApiIgnore
注释。
定义开发者资料。例如:
@Profile("dev")
@Controller
@RequestMapping("/internal/...")
@Api(value = "/internal/...", description = "Internal stuff")
public class OneOfTheInternalControllers { ... }
现在用配置文件标记所有内部控制器/端点。最后,如果您 运行 您的应用程序处于生产模式,则您无需执行任何操作。 @Profile("dev")
API 将被隐藏。但是,如果您 运行 您的应用程序在本地或在测试环境中,请传递以下 JVM 参数:
-Dspring.profiles.active=dev
如果您使用的是 IntelliJ,则可以在 Run/Debug 配置中传递它:
最后,您应该以开发人员的身份看到所有 API。