springdoc-openapi 在没有服务器的情况下生成 openapi yaml

Posted

技术标签:

【中文标题】springdoc-openapi 在没有服务器的情况下生成 openapi yaml【英文标题】:springdoc-openapi generate openapi yaml on build without server 【发布时间】:2020-10-18 07:59:57 【问题描述】:

我有一个 Spring Boot Gradle 项目,我想获取它的 OpenAPI 规范 YAML 文件。

据我了解官方swagger-core不支持Spring boot项目,因此我找到了springdoc-openapi(https://github.com/springdoc/springdoc-openapi-gradle-plugin)。

似乎为了获取 YAML/JSON 文件,在运行 generateOpenApiDocs 任务时,springdoc 库设置了一个带有一些端点 (/v3/api-docs) 的服务器来下载文件。

    我使用的是默认配置,但由于某种原因,我不断收到以下错误:

任务“generateOpenApiDocs”执行失败。 无法连接 http://localhost:8080/v3/api-docs 等了 30 秒

似乎由于某种原因它没有设置服务器。我该如何解决?

    是否可以跳过服务器部分?我可以将 springdoc 配置为在构建时简单地生成文件吗?

【问题讨论】:

【参考方案1】:

发生这种情况是因为有时嵌入式服务器需要一些时间才能启动,并且默认设置为 30 秒。请在您的 openAPI 块中添加以下属性,它会为您正常工作。请参阅以下示例:

openApi 
apiDocsUrl.set("http://localhost:9090/v3/api-docs.yaml")
outputDir.set(file("Your Directory path"))
outputFileName.set("openapi.yaml")
forkProperties.set("-Dserver.port=9090")
waitTimeInSeconds.set(60)
 

【讨论】:

【参考方案2】:

这就是我解决问题的方法

指定路径 在您的属性文件中输入:
springdoc:
  api-docs:
    path: /your path
配置插件 在您的 build.gradle 文件中输入:
openApi 
    apiDocsUrl.set("http://localhost:your port/your path)
    

【讨论】:

【参考方案3】:

如果您使用 spring-boot 部署 REST API,则依赖于 servlet 容器。

OpenAPI 规范所需的元数据仅在运行时由 Spring 框架提供,这解释了运行时生成的选择。

您可以在集成测试期间定义任何嵌入式 servlet 容器以生成 OpenAPI 规范。

【讨论】:

看起来很麻烦,因为您需要 yaml 才能使用 open-api gradle 插件来生成 api 存根。可惜他们然后强迫每个人都扮演自己的解决方案......

以上是关于springdoc-openapi 在没有服务器的情况下生成 openapi yaml的主要内容,如果未能解决你的问题,请参考以下文章

springdoc-openapi 如何在不更改 toString 的情况下使用 @JsonValue 枚举格式?

使用泛型继承的springdoc-openapi规范生成

springdoc-openapi 应用默认全局 SecurityScheme 可能吗?

使用 springdoc-openapi 和 spring-boot-starter-data-mongodb 生成 OpenAPI 文档

以编程方式添加安全方案时,模式从组件中消失

springdoc中的默认响应类