我可以运行Spring Boot应用程序,然后使用springdoc-openapi-maven-plugin
工件生成OpenAPI规范
但是,是否还有一种方法可以在不首先运行应用程序的情况下生成规范?
我目前想在GitHub Action中生成规范,直接的方法会简化很多。
您可以使用swagger编辑器:https://editor.swagger.io/
它允许您使用规范编写json/yaml,同时您可以查看结果。
此外,在上半部分有2个特性,允许您基于json/yaml生成代码。例如,您可以创建一个spring应用程序,其中包含要在json/yaml(服务器(中指定的所有端点。
但是您也可以生成HTML。(客户(
要使用springdoc-openapi-maven-plugin
生成OpenAPI,可以添加integration-test
目标,并在测试后运行mvn verify
生成json/yaml规范。(https://springdoc.org/plugins.html)
不幸的是,它会启动您的应用程序并调用OpenAPI端点。如果你的应用程序有启动依赖项(配置属性、数据库等(,那么你有两个选项:
-
在运行
mvn verify
之前,在docker容器中运行您的依赖项。此外,您还需要将属性配置为使用docker主机和端口。 -
更优雅的解决方案是创建不同的配置文件,例如
openapi
,并使用@EnableAutoConfiguration(exclude = ...)
禁用数据库自动配置。要禁用组件bean,可以使用@ComponentScan
和自定义TypeFilter
,例如,这将完全排除Service和Configuration层注入上下文(因为生成OpenAPI规范只需要Controller层(。如果要排除Controller层所依赖的bean,则需要将它们设置为非必需的。您可以通过为每个声明添加@Autowired(required = false)
来实现这一点,或者最好是为所有排除的bean并且仅为openapi
概要文件添加,为此,您可以使用QualifierAnnotationAutowireCandidateResolver
并重写isRequired
方法,在该方法中,您可以指定需要返回false
的所有排除的beans。