【问题标题】:Java Spring Swagger different API documentationsJava Spring Swagger 不同的 API 文档
【发布时间】:2019-01-14 11:27:43
【问题描述】:

我有一个 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>

换句话说:

我希望 DropDown-Box 访问的不同 API 被不同的 URL 调用:

我想要这个,因此我可以为客户提供具有不同 API 的不同 URL,而不是向我的开发人员同事提供另一个 URL。

【问题讨论】:

  • 您找到解决方案了吗?
  • @Dirk 你能弄清楚如何实现它吗?

标签: spring swagger-ui


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

  2. 这里是sources for swagger-ui,基于它我创建了一个修改过的 springfox.js 文件(适用于 2.10.5 版本),它只允许显示 one 具有 groupName==prefix 的文档页面(例如,如果你有你的案卷 .groupName("external") 它将显示在页面 external-swagger-ui.html

  3. 因此,为了使其正常工作,您总共需要添加 2 个文件 files placement 请注意,html 文件也被修改为使用自定义 springfox.js &lt;script src="springfox.js"&gt; &lt;/script&gt; 而不是 springfox-ui jar 中的那个。(在我的例子中,它是资源根,你可以在截图上看到)

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

  5. Working example

【讨论】:

  • 嗨@vadimmityanin,请在答案中列出代码的重要部分。
  • @vadimmityanin 我在您的 git 存储库中看到了 2 个 springfox.js 文件。为什么需要 2 个 js 文件?我试过你的代码,但它对我不起作用。我仍然可以在 swagger-ui.html 中看到 2 个文档组
  • @aliceangel 如果你开始我的项目(java 8)点击localhost:8080/external-swagger-ui.html,你将只能看到外部的 docket bean 内容。
  • @rbrtl 最重要的部分是我所做的 springfox.js 修改。每个 Docket 内容都可以绑定到其页面(只需复制 external-swagger-ui.html 并将其名称中的“external”单词更改为您的文档组)。 code //仅显示具有相应前缀的案卷... code 这部分来自 springfox-not-minified-source/springfox.js 规范该行为,但它不是必需的,仅供参考,应用程序工作你需要一个在 META-INF/resources/springfox.js
猜你喜欢
  • 1970-01-01
  • 2014-02-22
  • 2016-03-05
  • 1970-01-01
  • 1970-01-01
  • 2022-07-21
  • 2018-12-14
  • 2018-07-16
  • 1970-01-01
相关资源
最近更新 更多