Swagger

时间:2017-08-16 19:03:39

标签: java spring-boot swagger microservices springfox

我对微服务架构app swagger有疑问。该应用程序由JHipster生成。由于我的后端应用程序有很多端点,因此将这些端点加载到swagger是不可能的(整个网关应用程序都会卡住)。所以,我的想法是在Swagger(过滤器)上创建某种端点组。 目前,来自网关应用程序下拉列表的API项目打开Swagger UI,其中包含两个项目,默认(/ v2 / api-docs)和服务(/ service / v2 / api-docs)项目。点击第二项,通过加载所有端点获取完整的网关应用程序卡住。所以,我尝试制作多个下拉项而不是一个项(service(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仍在下拉列表中显示最初的两个项目。我需要的是拥有多个具有相似端点组的项目。

我已经失去了很多时间,并在询问之前做了很好的研究,所以请帮助我......

1 个答案:

答案 0 :(得分:0)

您可以在@Api下定义标签以对其进行分组。但它不会为您提供不同的swagger json文件。为了得到每个隔离的json,here is an example

在此示例中,我通过扫描@RestController动态创建SpringFox Docket Bean 并按控制器类将它们分组。您可以通过定义自定义注释并扫描它们来制定自己的分组策略。