5

我在我的 Java 项目的 pom 文件中使用以下工件安装了 swagger-ui:

   <dependency>
      <groupId>org.springdoc</groupId>
      <artifactId>springdoc-openapi-ui</artifactId>
      <version>1.5.2</version>
   </dependency>

   <dependency>
      <groupId>org.springdoc</groupId>
      <artifactId>springdoc-openapi-security</artifactId>
      <version>1.5.2</version>
   </dependency>

当我转到此 URL 时,我可以查看我的 RESTful 端点的 swagger ui

http://localhost:8081/swagger-ui/index.html?configUrl=/v3/api-docs/swagger-config

但不是这个链接

http://localhost:8081/swagger-ui/index.html

为什么是这样?如何将其更改回预期的 URL?

4

2 回答 2

8

首先,以下依赖与您提到的问题无关。

<dependency>
    <groupId>org.springdoc</groupId>
    <artifactId>springdoc-openapi-security</artifactId>
    <version>1.5.2</version>
</dependency>

现在回答你的问题。

URL http://localhost:8081/swagger-ui/index.html来自构建 Springdoc 的 Swagger-Core 库,因此它将为默认的 Petstore 示例提供服务。尽管可以使用application.properties文件中的以下属性禁用此页面。

springdoc.swagger-ui.disable-swagger-default-url=true

但这仅适用于 v1.4.1 及更高版本。

为什么是 /v3/api-docs/swagger-config ?

现在在 URl http://localhost:8081/swagger-ui/index.html?configUrl=/v3/api-docs/swagger-config中,查询参数configUrl指定从哪里获取 Springdoc 的 Swagger 特定配置文件。

现在,如果你真的点击 URL http://localhost:8081/v3/api-docs/swagger-config,你会得到一个类似于下面的配置文件

{
  "configUrl": "/v3/api-docs/swagger-config",
  "docExpansion": "none",
  "urls": [
    {
      "url": "/v3/api-docs/default",
      "name": "default"
    }
  ],
  "validatorUrl": ""
}

urls对象包含每个 API 组的各个对象。每个 API 组都显示在 Swagger-UI 中,如下所示

api 组

现在,对于每个 API 组,Springdoc 使用这些属性通过从给定的获取 OpenAPI 规范文件来呈现 Swagger-UI,urlname如上图所示呈现。

至于docExpansion属性,它被设置none为在我的application.properties

玩转属性

  • 如果要覆盖从其中获取 Springdoc 的 Swagger 配置文件的 URL,请使用以下属性。本质上,新 URL 应该返回一个类似于从/v3/api-docs/swagger-config返回的配置文件。默认为/v3/api-docs/swagger-config
springdoc.swagger-ui.configUrl=/mySpringdocConfig
springdoc.swagger-ui.path=/mySwagger-UIPath

结论

  • 我认为不可能?configUrl=/v3/api-docs/swagger-config从 URL 中删除 ,因为它始终可用并指向将从中获取 Sprinfdoc 配置文件的位置,如果不可用将导致获取配置时出错文件,从而使 Swagger-UI 无用。此外,由于框架本身正在使用它,因此您不想摆脱它。

  • 有关自定义 Springdoc 行为的所有受支持属性的列表,请参阅此处。

于 2021-01-22T15:40:23.623 回答
4

您需要访问 swagger ui,http://localhost:8081/swagger-ui.html而不是http://localhost:8081/swagger-ui/index.html加载宠物商店默认的 swagger。您可以在以下位置检查工作

https://github.com/springdoc/springdoc-openapi/issues/43

该 urlhttp://localhost:8081/swagger-ui.html将始终被重定向到 http://localhost:8081/swagger-ui/index.html?configUrl=/v3/api-docs/swagger-config.

您可以在 application.properties 中使用以下内容进行自定义

springdoc.api-docs.path=/api-docs 
springdoc.swagger-ui.path=/swagger-ui-custom.html

现在 urlhttp://localhost:8081/swagger-ui-custom.html将被重定向到 http://localhost:8081/swagger-ui/index.html?configUrl=/api-docs/swagger-config.

于 2021-01-21T06:35:08.927 回答