Swagger Codegen同名查询参数被头参数覆盖,如何同时生成两者?
问题原因
swagger-codegen默认将参数名作为参数唯一标识进行去重处理,不会区分参数的所属位置(header/query/path/form等),因此同名不同位置的参数会被判定为重复资源,定义顺序靠后的参数会被靠前的覆盖,你当前的配置中header参数的引用顺序在query参数之前,因此最终只生成了header类型的appid参数。
解决方案
方案1:调整插件配置(推荐)
首先将swagger-codegen-maven-plugin升级到2.4.13及以上版本,该版本开始支持将参数位置纳入去重判断逻辑。之后在pom.xml的插件配置块中添加对应配置即可:
<plugin> <groupId>io.swagger</groupId> <artifactId>swagger-codegen-maven-plugin</artifactId> <version>2.4.13</version> <executions> <execution> <goals> <goal>generate</goal> </goals> <configuration> <!-- 保留你原有配置:inputSpec、language、outputDirectory等 --> <additionalProperties> <allowDuplicateParameterNames>true</allowDuplicateParameterNames> <!-- 若上述配置不生效,可尝试替换为下方配置 --> <!-- <skipUniqueParamCheck>true</skipUniqueParamCheck> --> </additionalProperties> </configuration> </execution> </executions> </plugin>
该配置生效后,插件会自动区分不同位置的同名参数,不需要修改原有Swagger定义,生成的接口方法会同时包含两个appid参数,会自动按所属位置拼接请求。
方案2:添加扩展属性兼容低版本
如果不方便升级插件版本,可以在Swagger的参数定义中添加x-codegen-param-name自定义扩展,给两个参数设置不同的代码生成别名,避免命名冲突:
parameters: qry_param: name: appid in: query required: true type: string x-codegen-param-name: appidQuery hdr_param: name: appid in: header required: false type: string x-codegen-param-name: appidHeader
该方案不影响实际请求的参数名,请求时两个参数仍然会以appid为名称分别放到query和header中,仅生成的代码中参数名会使用你定义的别名,避免覆盖。
内容的提问来源于stack exchange,提问作者Aleksandr Erokhin
相关产品推荐
相关产品推荐

