Java OpenApi 3.0注册过滤器,用于排除带有特定标记的方法

Java OpenApi 3.0注册过滤器,用于排除带有特定标记的方法,java,swagger,swagger-2.0,openapi,Java,Swagger,Swagger 2.0,Openapi,我们需要使用Java注释生成API的多个定义。我们对任何和所有建议都持开放态度,但如果我们能够找出如何使其发挥作用,提出的建议似乎是一个可行的选择 我们基本上需要从一个代码库生成2个API文档。第一个应该包括所有扫描的资源。这一次没有问题,我们可以做到这一点 以下是示例注释方法的节略版本: @POST @路径(“/some/Path”) @使用(“应用程序/json”) @操作( summary=“做点什么…”, description=“做点什么…” ) @标记({@Tag(name=“exa

我们需要使用Java注释生成API的多个定义。我们对任何和所有建议都持开放态度,但如果我们能够找出如何使其发挥作用,提出的建议似乎是一个可行的选择

我们基本上需要从一个代码库生成2个API文档。第一个应该包括所有扫描的资源。这一次没有问题,我们可以做到这一点

以下是示例注释方法的节略版本:

@POST
@路径(“/some/Path”)
@使用(“应用程序/json”)
@操作(
summary=“做点什么…”,
description=“做点什么…”
)
@标记({@Tag(name=“example Tag”)})
@请求主体(
description=“做点什么…”,
必需=真,
content=@content(
schema=@schema(
实现=示例.class
)
)
)
@蜂鸟反应({
@蜂群反应(
responseCode=“201”,
description=“做点什么…”,
content=@content(
schema=@schema(
实现=示例.class
)
)
)
})
公共ApiResponse doSomething()引发异常{
...
}
下面是我们如何构建文档:


OpenAPI oas=新的OpenAPI();
//基本文档
信息=新信息()
.标题(“…”)
.说明(“…”)
.服务条款(“…”)
.contact(新联系人().email(“…”)
.版本(“…”);
//API服务器
服务器=新服务器().url(“…”);
//身份验证模式
SecurityScheme=新的SecurityScheme()
.名称(“…”)
.类型(…)
.计划(“…”)
.在(…);
Components Components=new Components().addSecuritySchemes(“示例验证”,scheme)
美洲国家组织信息(信息);
oas.addServersItem(服务器);
oas.组件(组件);
ModelConverters实例=ModelConverters.getInstance();
addConverter(新的MultimapConverter());
SwaggerConfiguration oasConfig=新的SwaggerConfiguration()
.openAPI(oas)
.预打印(真)
.resourcePackages(Stream.of(“…”).collect(Collectors.toSet());
OpenAPI OpenAPI=new-JaxrsOpenApiContextBuilder()
.openApiConfiguration(oasConfig)
.buildContext(true)
.read();
好的,到目前为止还不错。我们最终得到了一个包含一切的定义。现在我们需要创建第二个定义。这次它需要排除包含
@Tag=(name=“private”)
的所有操作

我创建了一个扩展名为
TagFilter
的过滤器。我已经重写了实现,然后将其添加到
SwaggerConfiguration
的过滤器类中:

SwaggerConfiguration=newswaggerconfiguration()
.openAPI(oas)
.filterClass(TagFilter.class.getName())//也尝试了getCanonicalName()
.预打印(真)
.resourcePackages(Stream.of(“…”).collect(Collectors.toSet());

不幸的是,筛选器类从未实例化。不知道如何拦截操作以删除它们。我们想到的其他选项是,如果我们能够找到一种方法,强制其中一个定义忽略
@Hidden

的话,那么就使用
@Hidden
注释。您有solution@RCvaram不。我使用OpenAPIv3生成了两个招摇过市的文档,其中包含组配置
@Bean public groupedepanapi externalOpenAPI(){return groupedepanpi.builder().group(“external”).pathsToExclude(internalPaths).pathsToMatch(allpath).build()我不能完全理解你的问题。但是我的一个可能会帮助你。