java Swagger读取器未安装

68bkxrlz  于 12个月前  发布在  Java
关注(0)|答案(2)|浏览(107)

我试图从ReaderScan接口调用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。我将提供所需的任何其他细节。
任何想法都欢迎!谢谢!

UPDATE:我尝试向这个类添加@SwaggerDefinition注解,如上所示,但它仍然不起作用。

知道我错过了什么吗

368yc8dk

368yc8dk1#

我终于找到了问题所在,很明显,最初设计的问题是我在同一个类上扩展了BaseApiListingResource,而我试图在这个类上实现ReaderBlock。(如果你知道原因,请随意评论)每当我扩展BaseApiListingResource时,ReaderListener都不起作用。如果我在一个不扩展BaseApiListingResource的类上实现ReaderListener,那么 * beforeScan* 和 afterScan 工作正常。
希望这对某人有帮助…

yzxexxkh

yzxexxkh2#

我们已经到了2023年,一切都在向前发展。下面是我做的使它功能化的事情。我使用vanilla jaxrsjar。

  • 创建实现ReaderListener的类(io.swagger.v3.jaxrs2.ReaderList)
  • 注解它@OpenAPIDefinition(io.swagger.v3.oas.annotations.OpenAPIDefinition)
  • 注册JaxrsAnnotationScanner类,通过SwaggerConfiguration示例设置它
  • 如果您的ReaderListener实现与其他资源在不同的包中,也可以通过SwaggerConfiguration示例将其注册为资源类

记住,scanner工作起来很懒,要想在你的日志中看到一些东西,你必须调用url来生成openapi定义。

相关问题