代码之家  ›  专栏  ›  技术社区  ›  Lukas

如何在不运行应用程序的情况下从Spring应用程序生成OpenAPI?

  •  0
  • Lukas  · 技术社区  · 3 年前

    我可以运行Spring Boot应用程序,然后使用 springdoc-openapi-maven-plugin 工件生成OpenAPI规范。

    但是,是否还有一种方法可以在不首先运行应用程序的情况下生成规范?

    我目前想在GitHub Action中生成规范,直接的方法会简化很多。

    0 回复  |  直到 3 年前
        1
  •  0
  •   Lako12    3 年前

    您可以使用swagger编辑器: https://editor.swagger.io/

    它允许您使用规范编写json/yaml,同时您可以查看结果。

    此外,在上半部分有2个特性,允许您基于json/yaml生成代码。 例如,您可以创建一个spring应用程序,其中包含要在json/yaml(服务器)中指定的所有端点。

    但是您也可以生成HTML。(客户)

        2
  •  0
  •   Ivan Zaitsev    3 年前

    使用生成OpenAPI springdoc-openapi-maven-plugin 您可以添加 integration-test 进球和跑动 mvn verify 以在测试后生成json/yaml规范。( https://springdoc.org/plugins.html )

    不幸的是,它会启动您的应用程序并调用OpenAPI端点。如果你的应用程序有启动依赖项(配置属性、数据库等),那么你有两个选项:

    1. 在运行之前在docker容器中运行您的依赖项 mvn验证 。此外,您还需要将属性配置为使用docker主机和端口。

    2. 更优雅的解决方案是创建不同的配置文件,例如 openapi 并通过使用禁用数据库自动配置 @EnableAutoConfiguration(exclude = ...) 。要禁用组件bean,可以使用 @ComponentScan 和自定义 TypeFilter 这将例如完全排除服务和配置层注入上下文(因为生成OpenAPI规范只需要控制器层)。如果要排除Controller层所依赖的bean,则需要将它们设置为非必需的。您可以通过添加 @Autowired(required = false) 对于每个声明,或者最好对所有排除的bean执行此操作,并且仅对 openapi 配置文件,为此您可以使用 QualifierAnnotationAutowireCandidateResolver 和超控 isRequired 方法,在该方法中可以指定需要返回的所有排除的bean false