使用批注或ResourceConfig

时间:2018-11-28 13:31:07

标签: java swagger jersey-2.0 openapi

我正在尝试使用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时,   过滤器将自动应用[...]

     

source

我的类路径中存在该类,并且我相信我依靠提供的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过滤器。

0 个答案:

没有答案