【问题标题】:Swagger codegen generates duplicated variablesSwagger codegen 生成重复变量
【发布时间】:2020-06-15 18:27:56
【问题描述】:

我正在尝试从包含的 yaml 生成客户端

  acceptParam:
    name: Accept
    type: string
    required: true
    in: header
    description: Accepted Content-type. Should be set to application/json
  contentTypeParam:
    name: Content-Type
    type: string
    required: true
    in: header
    description: Request Content-type. Should be set to application/json

这意味着,acceptcontentType 将出现在生成的方法签名中。

最重要的是,我已经配置了这样的插件

<plugin>
    <groupId>io.swagger.codegen.v3</groupId>
    <artifactId>swagger-codegen-maven-plugin</artifactId>
    <version>3.0.18</version>
    <executions>
        <execution>
            <goals>
                <goal>generate</goal>
            </goals>
            <phase>generate-sources</phase>
            <configuration>
                <inputSpec>${project.basedir}/src/main/resources/swagger.yaml</inputSpec>
                <language>java</language>
                <configOptions>
                    <dateLibrary>joda</dateLibrary>
                    <localVarPrefix>localVar</localVarPrefix>
                </configOptions>
                <library>resttemplate</library>
                <output>${project.build.directory}/generated-sources</output>
                <modelPackage>com.example.client.model</modelPackage>
                <apiPackage>com.example.client.api</apiPackage>
                <generateApiTests>false</generateApiTests>
                <generateModelTests>false</generateModelTests>
            </configuration>
        </execution>
    </executions>
</plugin>

还是在mvn clean install 之后

我来了

错误:(130,31) java: 变量accept已在方法中定义

并且生成的代码包含

public Response authorize(Request body, String accept, ...) {
   ....
   final List<MediaType> accept = apiClient.selectHeaderAccept(accepts);    
   ....
}

我尝试了不同版本的插件(从 2.3.0 到最新版本),在克服了许多其他问题之后,我总是这样结束。

【问题讨论】:

    标签: java http yaml swagger swagger-codegen


    【解决方案1】:

    在 OpenAPI 2.0 中,AcceptContent-Type 标头应该使用 consumesproduces 而不是参数来定义。在 OpenAPI 3.0 中,这些标头被定义为请求/响应媒体类型。

    改变你的操作定义如下:

    swagger: '2.0'
    
    paths:
      /foo:
        post:
          consumes:
            - application/json
          produces:
            - application/json
          ...
    

    或者如果您使用 OpenAPI 3.0:

    openapi: 3.0.0
    
    paths:
      /foo:
        post:
          requestBody:
            content:
              application/json:     # <----
                schema:
                  ...
          responses:
            '200':
              description: ok
              content:
                application/json:   # <----
                  schema:
                    ...
    

    【讨论】:

    • 嗯,这解释了很多,可惜那不是我的 API。希望一旦我联系到它的开发人员,他会解决这个问题......
    【解决方案2】:

    聚会有点晚了,但我在使用 3rd 方 API 时遇到了同样的问题,这是搜索中出现的第一个问题。 openapi yaml 在我的情况下似乎是有效的,并且由于它是第 3 方,因此更改它无论如何都不可行。我不得不使用 localVariablePrefix(变量完全拼写出来)。

    所以要修改你的 pom.xml:

    <configOptions>
        <dateLibrary>joda</dateLibrary>
        <localVariablePrefix>localVar</localVariablePrefix>
    </configOptions>
    ...
    

    【讨论】:

    • 答案中缺少一些有帮助的细节。 configOptionsconfiguration 的孩子。
    猜你喜欢
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 2015-05-07
    • 2019-06-23
    • 2019-04-09
    • 2016-06-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多