swagger-codegen 没有为任何语言正确生成公共参数
swagger-codegen is not correctly generating common parameters for any language
根据swagger documentation,我应该能够拥有所有操作共享的公共参数。问题是,当 运行 codegen 在本地时,生成的代码没有任何 common path 参数。下面的 yaml
生成任何语言的代码(我试过两种)。
非常令人困惑的是,如果我在 https://editor.swagger.io/ 中使用这个确切的 yaml
,生成的代码 确实 具有路径参数。我 运行 这是两种不同的语言,打字稿:
和 C#:
左边是在 editor.swagger.io 中生成的代码,右边是我在本地 运行 codegen 生成的代码。
在这两种情况下,.swagger-codegen\VERSION
文件是 3.0.20
,这是我正在使用的文件,但 https://editor.swagger.io/ 生成的代码确实具有参数路径。
这个简单的 yaml 文件重现了这个问题:
openapi: 3.0.2
info:
title: title
version: 1.0.0
paths:
'/instances/{id}':
summary: Manipulate a particular instance
get:
responses:
'200':
description: Ok
content:
text/plain:
schema:
type: string
example: pong
summary: Fetches an instance
parameters:
- in: path
name: id
schema:
type: integer
required: true
components:
securitySchemes:
bearerAuth:
scheme: bearer
bearerFormat: JWT
type: http
生成使用的命令行:
java ^
-classpath bin/swagger-codegen-cli.jar ^
-DdebugOperations ^
io.swagger.codegen.v3.Codegen ^
generate ^
-i enterpos-api.yaml ^
-l typescript-angular ^
-o generated-code/typescript-angular-builtin
并生成此输出:https://gist.github.com/alanboy/45ce792255e079dd0de4f70449ebf455。我觉得这可能是错误的用法或我的 yaml 有问题,但我不知道是什么。
主要问题 class。我注意到使用 io.swagger.codegen.v3.Codegen
class 会产生不正确的结果:
java -classpath bin/swagger-codegen-cli.jar io.swagger.codegen.v3.Codegen <more>
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
但这行得通:
java -jar bin/swagger-codegen-cli.jar <more>
这导致我在罐子中打开 MANIFEST.MF
并注意到主要的 class 实际上是这样的:
Main-Class: io.swagger.codegen.v3.cli.SwaggerCodegen
然后我 运行 这样的命令,一切都按预期进行。
java -classpath bin/swagger-codegen-cli.jar io.swagger.codegen.v3.cli.SwaggerCodegen <more>
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
根据swagger documentation,我应该能够拥有所有操作共享的公共参数。问题是,当 运行 codegen 在本地时,生成的代码没有任何 common path 参数。下面的 yaml
生成任何语言的代码(我试过两种)。
非常令人困惑的是,如果我在 https://editor.swagger.io/ 中使用这个确切的 yaml
,生成的代码 确实 具有路径参数。我 运行 这是两种不同的语言,打字稿:
和 C#:
左边是在 editor.swagger.io 中生成的代码,右边是我在本地 运行 codegen 生成的代码。
在这两种情况下,.swagger-codegen\VERSION
文件是 3.0.20
,这是我正在使用的文件,但 https://editor.swagger.io/ 生成的代码确实具有参数路径。
这个简单的 yaml 文件重现了这个问题:
openapi: 3.0.2
info:
title: title
version: 1.0.0
paths:
'/instances/{id}':
summary: Manipulate a particular instance
get:
responses:
'200':
description: Ok
content:
text/plain:
schema:
type: string
example: pong
summary: Fetches an instance
parameters:
- in: path
name: id
schema:
type: integer
required: true
components:
securitySchemes:
bearerAuth:
scheme: bearer
bearerFormat: JWT
type: http
生成使用的命令行:
java ^
-classpath bin/swagger-codegen-cli.jar ^
-DdebugOperations ^
io.swagger.codegen.v3.Codegen ^
generate ^
-i enterpos-api.yaml ^
-l typescript-angular ^
-o generated-code/typescript-angular-builtin
并生成此输出:https://gist.github.com/alanboy/45ce792255e079dd0de4f70449ebf455。我觉得这可能是错误的用法或我的 yaml 有问题,但我不知道是什么。
主要问题 class。我注意到使用 io.swagger.codegen.v3.Codegen
class 会产生不正确的结果:
java -classpath bin/swagger-codegen-cli.jar io.swagger.codegen.v3.Codegen <more>
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
但这行得通:
java -jar bin/swagger-codegen-cli.jar <more>
这导致我在罐子中打开 MANIFEST.MF
并注意到主要的 class 实际上是这样的:
Main-Class: io.swagger.codegen.v3.cli.SwaggerCodegen
然后我 运行 这样的命令,一切都按预期进行。
java -classpath bin/swagger-codegen-cli.jar io.swagger.codegen.v3.cli.SwaggerCodegen <more>
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^