Java Spring Swagger不同的API文档

时间:2019-01-14 11:27:44

标签: spring swagger-ui

我有一个Spring应用程序,其中公开了两个rest接口供使用。 一个是内部为内部开发人员开发的,另一个是为客户开发的。

Swagger确实生成了一个很好的文档,可以在 /swagger-ui.html 下找到。
在此URL下,它显示了内部和外部用户的文档。

这是我的代码设置:

import org.springframework.boot.info.BuildProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@Configuration
@EnableSwagger2
public class Swagger2UiConfiguration extends WebMvcConfigurerAdapter {

    @Bean(name="restInternalSwaggerApi")
    public Docket internalApi(BuildProperties build) {
        final Docket docket = new Docket(DocumentationType.SWAGGER_2)
            .groupName( "internal" )
            .select()
                .apis( RequestHandlerSelectors.basePackage("com.xyz.web.internal") )
            .build();
        return docket;
    }

    @Bean(name="restPublicSwaggerApi")
    public Docket publicApi(BuildProperties build) {
        final Docket docket = new Docket(DocumentationType.SWAGGER_2)
            .groupName( "public" )
            .select()
                .apis( RequestHandlerSelectors.basePackage("com.xyz.web.public") )
            .build();
        return docket;
    }
}

现在,我想分开这些swagger-ui文档。这样我们的内部开发人员就可以像
那样访问它 /documentation/private/swagger-ui.html
/documentation/public/api-v1.html

彼此都不见。 该怎么做?

我在这里找到了一些提示,但是它们确实对我没有建设性:

http://sp ingfox.github.io/springfox/docs/current/#q13和链接的资源
Customize endpoints of dockets with springfox Swagger
swagger multiple versions in path
https://github.com/springfox/springfox/issues/963
https://github.com/springfox/springfox/issues/1263#issuecomment-210839308

如果有人让我提供适当的文档,我也会很高兴。
让我知道该问题是否难以理解以及如何改进。

有关Java Maven的版本信息:

<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.8.0</version>

<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.8.0</version>

换句话说:

我希望通过不同的URL调用DropDown-Box到达的不同API:

enter image description here

我想要这个,所以我可以给客户一个具有不同API的URL,而不是给开发人员同事一个URL。

1 个答案:

答案 0 :(得分:0)

  1. Swagger-ui 是一个包含 html 和 css 的模块(将 ui 作为解决方案包含的众多 jar 中的一个),因此如果您还需要一个页面(在您的情况下为 api-v1.html),您需要再添加一个html。

  2. 这里是 sources for swagger-ui,我基于它创建了一个修改过的 springfox.js 文件(对于 2.10.5 版本),该文件只允许显示具有 groupName 的一个记录== 页面的前缀(例如,如果您有 .groupName("external") 它将显示在页面上 external-swagger-ui.html

  3. 因此,为了使其正常工作,您总共需要添加 2 个文件 files placement 请注意,html 文件也被修改为使用自定义 springfox.js <script src="springfox.js"> </script> 而不是与 springfox-ui jar 一起使用的那个。(在我的情况下,它是资源根,如屏幕截图所示)

  4. 默认的 swagger-ui.html 对此解决方案没有干扰。

  5. Working example