如何在Spring Boot中针对特定配置文件隐藏端点?

4

我正在使用OpenAPI 3,并希望在Swagger UI中隐藏一些端点。 在Swagger2中,我发现可以通过创建自己的注释来完成此操作,但我不知道如何在OpenAPI 3中实现。

@Bean
public Docket postsApi() {
    return new Docket(DocumentationType.SWAGGER_2)
            .groupName("public-api")
            .apiInfo(apiInfo())
            .select()
                 // This is the part that will ignore the method
                .apis((handler) -> !handler.isAnnotatedWith(IgnoreForProd.class))
            .build();
}
1个回答

2
我是这样解决这个问题的:
第一步 - 我已经从pom.xml中删除了springfox和springfox-swagger-ui依赖项,并将其替换为springdoc-openapi-ui,就像这样:
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-ui</artifactId>
<version>1.6.6</version>

第二步 - 创建以下Bean:

@Configuration
public class OpenAPIConfig {

    @Value("${version:unknown}")
    private String version;

    @Bean
    public OpenAPI springShopOpenAPI() {
        return new OpenAPI()
                .info(new Info().title("Title API")
                        .description("Description API")
                        .version(version)
                        .license(new License().name("Apache 2.0").url("http://springdoc.org")))
                .externalDocs(new ExternalDocumentation()
                        .description("SpringShop Wiki Documentation")
                        .url("https://springshop.wiki.github.org/docs"));
    }

}

第三步 - 然后在application.yml中,您可以按包和/或路径进行过滤:

springdoc:
  packages-to-scan: com.company.projectxyz.controller
  pathsToMatch: /api/whatever/public/**

第四步 - 如果您需要按配置文件过滤不同的路径/包,您也可以在application.yml中执行第三步操作:

spring.config.activate.on-profile: dev/qa/prod...

并访问位于/swagger-ui/index.html的Swagger。

希望这有所帮助 =)


1
谢谢!每次我在寻找这个的时候,都会看到 springfox 的 @ApiIgnore 注解,但是找不到 springdoc 的答案,这非常有帮助。 - Joselo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接