我正在尝试使用Swagger-Core 2.0.5中的OpenAPISpecFilter,它会生成OpenAPI 3.0规范。
samples提供了一个此类作为示例,但是在运行示例应用程序时,过滤器似乎未处于活动状态。我在应用程序中观察到相同的行为。
关于该主题的文档不是很清楚:
过滤器
您可以在以下位置提供OpenAPISpecFilter实现 配置以能够滤除甚至完全更改 解析的定义。
实现过滤器时,扩展AbstractSpecFilter可能是 最方便的选择,因为它允许仅覆盖所需的 过滤方法。
一个简单的过滤器示例可能是:
/**
* Sample filter to avoid all resources for the /user resource
**/ public class NoPetOperationsFilter extends AbstractSpecFilter {
public static final String PET_RESOURCE = "/pet";
@Override
public Optional<Operation> filterOperation(Operation operation, ApiDescription api, Map<String, List<String>> params, Map<String, String> cookies, Map<String, List<String>> headers) {
if (api.getPath().startsWith(PET_RESOURCE)) {
return Optional.empty();
}
return Optional.of(operation);
} } check out the tests for some additional examples of filter usage.
当依靠提供的JAX-RS资源公开API时, 过滤器将自动应用[...]
我的类路径中存在该类,并且我相信我依靠提供的JAX-RS资源来公开该API 。
我在ResourceConfig
中看不到任何Swagger / OpenAPI注释或元素,因此无法手动声明过滤器。
文档继续:
[...]否则,例如当从自己的servlet或资源提供定义时,您可以像这样应用它:
OpenAPI oas = resolveDefinition()
OpenAPISpecFilter
SpecFilter f = new SpecFilter();
oas = f.filter(oas, filterImpl, getQueryParams(uriInfo.getQueryParameters()), getCookies(headers),
getHeaders(headers));
这很奇怪,因为OpenAPISpecFilter
对象没有filter
方法。
我可能只是在这里缺少了一些东西,但是情况尚不清楚(作为文档)。我在示例/开源项目中找不到任何有效的示例,我只是想知道必须如何注册此特定Swagger / OpenAPI过滤器。