当前位置: 首页 > 知识库问答 >
问题:

使用swagger codecen时重复局部变量ContentType

傅自明
2023-03-14

我在使用swagger codegen时遇到了一个问题。我已经从swaggerHub自动下载了swagger表单,然后,我使用swagger代码生成客户端。然而,对于POST请求,它需要ContentType作为参数。所以我在编译时收到一条消息:

变量内容类型已在方法验证地址中定义

庞。xml文件:

<!-- download swagger -->
<plugin>
    <groupId>io.swagger</groupId>
    <artifactId>swaggerhub-maven-plugin</artifactId>
    <executions>
        <execution>
            <id>aec</id>
            <phase>generate-sources</phase>
            <goals>
                <goal>download</goal>
            </goals>
            <configuration>
                <api>Address</api>
                <owner>test</owner>
                <version>2.13.0</version>
                <format>yaml</format>
                <token>test</token>
                <outputFile>${address-service-swagger.file}</outputFile>
            </configuration>
        </execution>
    </executions>
</plugin>
<!-- generate -->

<plugin>
    <groupId>io.swagger</groupId>
    <artifactId>swagger-codegen-maven-plugin</artifactId>
    <executions>
         <execution>
            <id>address-service-client</id>
            <phase>generate-sources</phase>
            <goals>
                <goal>generate</goal>
            </goals>
            <configuration>
                <ignoreFileOverride>${project.basedir}/.swagger-codegen-ignore</ignoreFileOverride>
                <inputSpec>${address-service-swagger.file}</inputSpec>
                <language>java</language>
                <modelPackage>com.shipment.client.address.pojo</modelPackage>
                <apiPackage>com.shipment.client.address.api</apiPackage>
                <invokerPackage>com.shipment.client.address.invoker</invokerPackage>
                <configOptions>
                  <generateApis>false</generateApis>
                    <dateLibrary>java8</dateLibrary>
                    <sourceFolder>src/gen/java</sourceFolder>
                </configOptions>
                <library>resttemplate</library>
            </configuration>
        </execution>
   </executions>
 </plugin>

swagger文件:

/addresses/validate:
    post:
      tags:
      - Addresses
      operationId: validateAddress
      description: Validate address
      parameters:
      - name: Authorization
        in: header
        required: true
        type: string
      - name: Content-Type
        in: header
        description: ...
        required: true
        type: string
      - name: addressRequest
        in: body
        description: The address request to validation
        required: true
        schema:
          $ref: "#/definitions/AddressRequest"
...

生成的Api类:

    public void validateAddress(String authorization, String contentType, AddressRequest addressRequest) throws RestClientException {
        Object postBody = addressRequest;

        // verify the required parameter 'authorization' is set
        if (authorization == null) {
            throw new HttpClientErrorException(HttpStatus.BAD_REQUEST, "Missing the required parameter 'authorization' when calling validateAddress");
        }

        // verify the required parameter 'contentType' is set
        if (contentType == null) {
            throw new HttpClientErrorException(HttpStatus.BAD_REQUEST, "Missing the required parameter 'contentType' when calling validateAddress");
        }

        // verify the required parameter 'addressRequest' is set
        if (addressRequest == null) {
            throw new HttpClientErrorException(HttpStatus.BAD_REQUEST, "Missing the required parameter 'addressRequest' when calling validateAddress");
        }

        String path = UriComponentsBuilder.fromPath("/addresses/validate").build().toUriString();

        final MultiValueMap<String, String> queryParams = new LinkedMultiValueMap<String, String>();
        final HttpHeaders headerParams = new HttpHeaders();
        final MultiValueMap<String, Object> formParams = new LinkedMultiValueMap<String, Object>();

        if (authorization != null)
        headerParams.add("Authorization", apiClient.parameterToString(authorization));
        if (contentType != null)
        headerParams.add("Content-Type", apiClient.parameterToString(contentType));

        final String[] accepts = { };
        final List<MediaType> accept = apiClient.selectHeaderAccept(accepts);
        final String[] contentTypes = { };
        final MediaType contentType = apiClient.selectHeaderContentType(contentTypes);

        String[] authNames = new String[] {  };

        ParameterizedTypeReference<Void> returnType = new ParameterizedTypeReference<Void>() {};
        apiClient.invokeAPI(path, HttpMethod.POST, queryParams, postBody, headerParams, formParams, accept, contentType, authNames, returnType);
    }

如何解决这个问题?谢谢!

共有1个答案

敖和韵
2023-03-14

发生这种情况是因为局部变量名与生成代码中的参数名冲突。添加

<configOptions>
    ...
    <localVarPrefix>localVar</localVarPrefix>
</configOptions>

 类似资料:
  • 我想在lambda函数中使用局部变量,但我得到错误:请参见1。和2。代码中的点。

  • 主要内容:局部变量,全局变量,局部变量和全局变量的综合示例在《 C语言形参和实参的区别》中提到,形参变量要等到函数被调用时才分配内存,调用结束后立即释放内存。这说明形参变量的作用域非常有限,只能在函数内部使用,离开该函数就无效了。 所谓 作用域( Scope ) ,就是变量的有效范围。 不仅对于形参变量,C语言中所有的变量都有自己的作用域。决定变量作用域的是变量的定义位置。 局部变量 定义在函数内部的变量称为 局部变量(Local Variable) ,

  • Lua 的设计有一点很奇怪,在一个 block 中的变量,如果之前没有定义过,那么认为它是一个全局变量,而不是这个 block 的局部变量。这一点和别的语言不同。容易造成不小心覆盖了全局同名变量的错误。 定义 Lua 中的局部变量要用 local 关键字来显式定义,不使用 local 显式定义的变量就是全局变量: g_var = 1 -- global var local l_va

  • 简介 在前面的章节中,我已经讲述了如何定义函数。在本节中,我讲介绍局部变量,这将会使定义函数变得更加容易。 let表达式 使用let表达式可以定义局部变量。格式如下: (let binds body) 变量在binds定义的形式中被声明并初始化。body由任意多个S-表达式构成。binds的格式如下: [binds] → ((p1 v1) (p2 v2) ...) 声明了变量p1、p2,并分别

  • 局部变量用于模版渲染,也就是模版中的 site 变量。 默认变量 变量 描述 posts 所有文章 pages 所有分页 categories 所有分类 tags 所有标签 获取变量 hexo.locals.get('posts') 设置变量 hexo.locals.set('posts', function(){ return ... }); 移除变量 hexo.locals.remove(

  • 问题内容: 我正在尝试解决一个任务(我对Java还是很陌生),并且已经花了很多资源来解决此冲突,但是仍然无法解决(注意:Tuna是我的Scanner变量) } 结果是:线程“ main” java.lang.Error中的异常:未解决的编译问题:重复的局部变量计数 我应该解决的问题是: 编写程序以读取一个数字并将所有数字从1汇总到该数字。例如,如果用户键入6,则输出为21(1 + 2 + 3 +