java - Swagger 上的 API 分割

标签 java spring-boot swagger microservices springfox

我有一个关于微服务架构应用程序 swagger 的问题。该应用程序是使用 JHipster 生成的。由于我的后端应用程序有很多端点,因此将这些端点加载到 swagger 中是不可能的(整个网关应用程序被卡住)。所以,我的想法是在 Swagger(过滤器)上创建某种端点组。 目前,网关应用程序下拉列表中的 API 项目会打开 Swagger UI,其中包含两个项目:默认 (/v2/api-docs) 和服务 (/service/v2/api-docs) 项目。单击第二项会导致整个网关应用程序因加载所有端点而卡住。因此,我尝试制作多个下拉项而不是一项(服务(service/v2/api-docs))。我遵循了本教程:https://piotrminkowski.wordpress.com/2017/04/14/microservices-api-documentation-with-swagger2/ 所以,在我的网关应用程序中,我有 GatewaySwaggerResourceProvider:

@Override
public List<SwaggerResource> get() {
    List<SwaggerResource> resources = new ArrayList<>();

    //Add the default swagger resource that correspond to the gateway's own swagger doc
    resources.add(swaggerResource("default", "/v2/api-docs"));

    //Add the registered microservices swagger docs as additional swagger resources
    List<Route> routes = routeLocator.getRoutes();
    routes.forEach(route -> {
        resources.add(swaggerResource(route.getId(), route.getFullPath().replace("**", "v2/api-docs")));
    });

    return resources;
}

在我的网关主类中,我放置了:

@Bean
UiConfiguration uiConfig() {
    return new UiConfiguration("validatorUrl", "list", "alpha", "schema",
        UiConfiguration.Constants.DEFAULT_SUBMIT_METHODS, false, true, 60000L);
}

在我的微服务应用程序(后端应用程序)主类中,我放置了 Docket @Bean,它仅过滤特定包中的端点:

@Bean
public Docket api() throws IOException {
    return new Docket(DocumentationType.SWAGGER_2)
        .groupName("product")
        .select()
        .apis(RequestHandlerSelectors.basePackage("kango.web.rest"))
        .paths(PathSelectors.ant("/product-types/*"))
        .build()
        .apiInfo(apiInfo());
}

此后,我重新启动了两个应用程序,Swagger 仍然在下拉列表中显示最初的两项。我需要的是拥有多个具有相似端点组的项目。

我浪费了很多时间,在提问之前做了很好的研究,所以请帮助我......

最佳答案

您可以在@Api下定义标签来对它们进行分组。但它不会给你一个不同的 swagger json 文件。为了获得每个隔离的单独 json,here is an example

在这个例子中,我通过扫描 @RestController 动态创建 SpringFox Docket Bean 并将它们按 Controller 类分组。您可以通过定义自定义注释并扫描它们来拥有自己的分组策略。

关于java - Swagger 上的 API 分割,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45721143/

相关文章:

java - 什么是 JDBC 驱动程序管理器?

mysql - 如何为 Spring Boot 应用程序创建 Dockerfile?

annotations - 在数组字段请求上添加模型模式捕获元素

在其他正在运行的 javaws 死实例被杀死之前,Java WS 不会启动应用程序

java - jpa 继承 - 在其他几个实体中重用一个实体

docker - Docker上运行的springboot无法从资源中读取文件

java - Spring Rest资源变更路径

asp.net - web-api 和 swagger 文档

swagger - 更新到 Swashbuckle.AspNetCore 3.0 不再按标签分组

java - java中输出字数统计时出错