Swagger ReaderListener 未调用

问题描述 投票:0回答:2

我试图从 ReaderListener 接口调用 afterScan(...) 方法,但它没有被调用。这是我的代码:

@SwaggerDefinition( info = @Info(
    description = "My API",
    version = "V1.2.3",
    title = "The only API you'll ever need",
    termsOfService = "share and care",
    contact = @Contact(name = "Test-Bob", email = "[email protected]", url = "http://swagger.io"),
    license = @License(name = "Apache 2.0", url = "http://www.apache.org")))
    @Api(tags = {"something", "else"})
    @Path("/myUrl/swagger/{type:json|yaml}")
    public class MyApiListingResource extends BaseApiListingResource implements ReaderListener {

      private static final Logger logger = LoggerFactory.getLogger(MyApiListingResource.class); 

      @Context ServletContext context;

      @GET
      @Produces({MediaType.APPLICATION_JSON, "application/yaml"})
      @ApiOperation(value = "The swagger definition in either JSON or YAML", 
        hidden = true)
      public Response getListing(@Context Application app, @Context ServletConfig servletConfig, @Context HttpHeaders headers,
                @Context UriInfo uriInfo, @PathParam("type") String type) throws JsonProcessingException {

            if (isNotBlank(type) && type.trim().equalsIgnoreCase("yaml")) {

                return getListingYamlResponse(app, context, servletConfig, headers, uriInfo);

            } else {

                System.out.println("I found json!");
                logger.debug("I'm also before!!!");

                return getListingJsonResponse(app, context, servletConfig, headers, uriInfo);
            }
      }

      @Override
      public void beforeScan(Reader reader, Swagger swagger) {

      System.out.println("I'm before!!!");
      logger.debug("I'm also before!!!");

      } 

      @Override
      public void afterScan(Reader reader, Swagger swagger) {

      System.out.println("I'm after!!!");
      logger.debug("I'm also after!!!");     

      }

    }

现在当我拨打以下服务时:

http://localhost:9081/myApp/myUrl/swagger/json

我确实收到了“我找到了 json!”在我的控制台和日志中...但是控制台或日志中没有打印任何“之前”或“之后”注释。

我正在使用 Swagger 1.5.10 和 Java 7。我将提供所需的任何其他详细信息。

欢迎任何想法!谢谢!


更新:我尝试向此类添加@SwaggerDefinition注释,如上所示,但它仍然不起作用。

我缺少什么想法吗?

java web-services jax-rs swagger swagger-2.0
2个回答
1
投票

我终于弄清楚了这里的问题。显然,原始设计的问题是我在尝试实现 ReaderListener 的同一个类上扩展了

BaseApiListingResource
。无论出于何种原因(如果您知道原因,请随时发表评论)每当我扩展
ReaderListener
时,
BaseApiListingResource
都不起作用。如果我在不扩展
ReaderListener
的类上实现
BaseApiListingResource
,那么
beforeScan
afterScan
工作得很好。

希望这对某人有帮助...


0
投票

我们已进入 2023 年,事情正在向前发展。 这是我为使其发挥作用所做的工作。我使用香草 jaxrs 罐子。

  • 创建实现
    ReaderListener
    的类 (io.swagger.v3.jaxrs2.ReaderListener)
  • 对其进行注释
    @OpenAPIDefinition
    (io.swagger.v3.oas.annotations.OpenAPIDefinition)
  • 通过
    JaxrsAnnotationScanner
    实例将
    SwaggerConfiguration
    注册为scannerClass
  • 如果您的
    ReaderListener
    实现与其他资源位于不同的包中,也可以通过
    SwaggerConfiguration
    实例将其注册为资源类

请记住,扫描仪的工作方式是“懒惰”的。要在日志中查看某些内容,您必须调用 url 来生成 openapi 定义。

© www.soinside.com 2019 - 2024. All rights reserved.