Swagger-core: 使用 Jersey ResourceConfig 为 Swagger 设置自定义应用程序类的任何解决方法

创建于 2016-01-19  ·  3评论  ·  资料来源: swagger-api/swagger-core

我正在遵循 1.3.12 到 1.5.6 的升级指南以及Jersey 2.X 项目设置指南。 我遇到了“自定义应用程序”子类的问题,它提供了以下示例代码:

public class SampleApplication extends Application {
    <strong i="7">@Override</strong>
    public Set<Class<?>> getClasses() {
        Set<Class<?>> resources = new HashSet();

        //resources.add(FirstResource.class);
        //resources.add(SecondResource.class);
        //...

        resources.add(io.swagger.jaxrs.listing.ApiListingResource.class);
        resources.add(io.swagger.jaxrs.listing.SwaggerSerializers.class);

        return resources;
    }
}

我们的项目与您提供的示例有所不同,因为它扩展了Jersey ResourceConfig,而不是直接扩展Application类。 问题在于ResourceConfig类本身覆盖了getClasses()方法并将其声明为 final。

您是否知道有任何方法可以解决此限制,无论是通过将必要的资源添加到球衣应用程序的其他部分还是通过其他一些哄骗招摇的方式? 通过ResourceConfig.register()辅助方法添加它们确实使swagger.json文件在通常的路径中可用,但不会使用已用@Api注释的端点类的文档填充它registered() (并且在升级前用于工作)。 我不想走 web.xml servlet 或过滤器的路线。

生成的 swagger.json 只包含我在新 BeanConfig 中定义的额外内容,如下所示:

// http://localhost:8080/v1.0/swagger.json

{
  "swagger": "2.0",
  "info": {
    "description": "Description of my App.",
    "version": "1.0",
    "title": "MyApp"
  },
  "basePath": "/v1.0"
}

谢谢你的帮助。

最有用的评论

hostschema是可选的,是的。
如果没有setResroucePackage ,你会得到一个空的输出是的,正如你所看到的;)

所有3条评论

只要添加资源就可以了。 使用ResourceConfig.register()是一个很好的解决方案。 您没有看到它被填充,因为您还没有完成指南中的最后一步 - https://github.com/swagger-api/swagger-core/wiki/Swagger-Core-Jersey-2.X-Project -Setup-1.5#3 -configure-and-initialize-swagger。

您所指的最后一步是我提到的getClasses()吗? 还是BeanConfig位? 对于BeanConfig我有以下内容:

    <strong i="9">@PostConstruct</strong>
    /**
     * Initializes Swagger Configuration
     */
    public void initializeSwaggerConfiguration() {
        final ReflectiveJaxrsScanner scanner = new ReflectiveJaxrsScanner();
        scanner.setResourcePackage("com.my.project.api");
        ScannerFactory.setScanner(scanner);
        BeanConfig config = new BeanConfig();
        config.setTitle("MyApp");
        config.setDescription("Description of my App");
        config.setVersion("1.0");
        config.setBasePath("/v1.0");
        config.setScan(true);
    }

我在这个例子中唯一遗漏的是setResourcePackage ——我明天会试试。 主机和架构位是选项对吗? 我记得在某处读到过...

hostschema是可选的,是的。
如果没有setResroucePackage ,你会得到一个空的输出是的,正如你所看到的;)

此页面是否有帮助?
0 / 5 - 0 等级