打开 API 代码生成器 Maven 插件使用旧的 Swagger 2 注释而不是 Swagger 3 注释
Open API code generator Maven plugin uses old Swagger 2 annotations instead of Swagger 3 annotations
我正在使用 Open API 代码生成器 Maven 插件从文件生成 Open API 3.0。我在 pom.xml:
中使用这个插件
<groupId>org.openapitools</groupId>
<artifactId>openapi-generator-maven-plugin</artifactId>
<version>4.3.0</version>
插件生成 API 没有任何问题,但它没有使用 Swagger v3 注释,而是使用旧的 Swagger 注释。例如参数使用 @ApiParam
注释,而不是 @Parameter
注释应该使用 io.swagger.v3.oas.annotations
包:
default ResponseEntity<Fault> getFault(@ApiParam(value = "",required=true) @PathVariable("jobId") String jobId) {
因此,最新的 Swagger UI 无法正确显示文档。当我使用 swagger.v3 注释创建端点时,Swagger UI 正常工作。
根据官方网站 https://openapi-generator.tech/docs/plugins/ ,我应该包括这个依赖:
<dependency>
<groupId>io.swagger.parser.v3</groupId>
<artifactId>swagger-parser</artifactId>
</dependency>
但即使有这种依赖性,插件仍然会生成带有旧注释的源代码。
如何强制 Open API 代码生成器使用 Swagger v3 注释?
目前不支持 V3 注释。
您需要覆盖小胡子模板。
检查这些 PR:
https://github.com/OpenAPITools/openapi-generator/pull/4779
https://github.com/OpenAPITools/openapi-generator/pull/6306
更多信息:
https://github.com/OpenAPITools/openapi-generator/issues/6108
https://github.com/OpenAPITools/openapi-generator/issues/5803
您可以使用上面 PR 的升级模板,或者在合并时等待。
现在插件的 5.3.1 版本已经发布,我使用了 https://github.com/OpenAPITools/openapi-generator/pull/9775 and https://github.com/OpenAPITools/openapi-generator/issues/6108 中的信息使其适用于我。
我在 pom.xml 中添加了三个配置选项:
<plugin>
<groupId>org.openapitools</groupId>
<artifactId>openapi-generator-maven-plugin</artifactId>
<version>5.3.1</version>
<configuration>
<!-- other config omitted -->
<configOptions>
<oas3>true</oas3>
<useSpringController>true</useSpringController>
<useSpringfox>false</useSpringfox>
</configOptions>
</configuration>
</plugin>
之后,可能需要添加另一个依赖项作为解决方法,因为插件会在生成的代码中添加未使用的导入。
<dependency>
<!-- try to remove this dependency when a new version (5.3.1+) of the openapi-generator plugin is available -->
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
<version>1.6.3</version>
</dependency>
我正在使用 springdoc-openapi-ui 依赖项。
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-ui</artifactId>
<version>1.6.3</version>
</dependency>
我正在使用 Open API 代码生成器 Maven 插件从文件生成 Open API 3.0。我在 pom.xml:
中使用这个插件<groupId>org.openapitools</groupId>
<artifactId>openapi-generator-maven-plugin</artifactId>
<version>4.3.0</version>
插件生成 API 没有任何问题,但它没有使用 Swagger v3 注释,而是使用旧的 Swagger 注释。例如参数使用 @ApiParam
注释,而不是 @Parameter
注释应该使用 io.swagger.v3.oas.annotations
包:
default ResponseEntity<Fault> getFault(@ApiParam(value = "",required=true) @PathVariable("jobId") String jobId) {
因此,最新的 Swagger UI 无法正确显示文档。当我使用 swagger.v3 注释创建端点时,Swagger UI 正常工作。
根据官方网站 https://openapi-generator.tech/docs/plugins/ ,我应该包括这个依赖:
<dependency>
<groupId>io.swagger.parser.v3</groupId>
<artifactId>swagger-parser</artifactId>
</dependency>
但即使有这种依赖性,插件仍然会生成带有旧注释的源代码。
如何强制 Open API 代码生成器使用 Swagger v3 注释?
目前不支持 V3 注释。
您需要覆盖小胡子模板。
检查这些 PR:
https://github.com/OpenAPITools/openapi-generator/pull/4779
https://github.com/OpenAPITools/openapi-generator/pull/6306
更多信息:
https://github.com/OpenAPITools/openapi-generator/issues/6108
https://github.com/OpenAPITools/openapi-generator/issues/5803
您可以使用上面 PR 的升级模板,或者在合并时等待。
现在插件的 5.3.1 版本已经发布,我使用了 https://github.com/OpenAPITools/openapi-generator/pull/9775 and https://github.com/OpenAPITools/openapi-generator/issues/6108 中的信息使其适用于我。
我在 pom.xml 中添加了三个配置选项:
<plugin>
<groupId>org.openapitools</groupId>
<artifactId>openapi-generator-maven-plugin</artifactId>
<version>5.3.1</version>
<configuration>
<!-- other config omitted -->
<configOptions>
<oas3>true</oas3>
<useSpringController>true</useSpringController>
<useSpringfox>false</useSpringfox>
</configOptions>
</configuration>
</plugin>
之后,可能需要添加另一个依赖项作为解决方法,因为插件会在生成的代码中添加未使用的导入。
<dependency>
<!-- try to remove this dependency when a new version (5.3.1+) of the openapi-generator plugin is available -->
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
<version>1.6.3</version>
</dependency>
我正在使用 springdoc-openapi-ui 依赖项。
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-ui</artifactId>
<version>1.6.3</version>
</dependency>