You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenAPI使用枚举作为路径参数时值自动添加引号如何解决

OpenAPI路径枚举参数自动加引号问题解决方案

问题根因

从下拉选择框选中枚举值后,参数被URL编码的双引号包裹为%22summary%22格式,核心是Swagger/OpenAPI UI的参数序列化逻辑错误:工具错误将路径参数按照JSON字符串规则序列化,给纯文本的枚举值额外包裹了双引号。
问题复现截图:
枚举参数传参异常截图
给出的接口定义本身无语法错误,问题诱因通常是参数未显式声明序列化风格、或使用的Swagger UI版本存在已知bug。

修复方案

按优先级从高到低尝试:

  • 显式声明路径参数的序列化规则,覆盖工具的错误默认逻辑。OpenAPI 3.0规范中路径参数默认序列化风格为simple(直接拼接纯文本值,不做JSON转换),但部分版本的文档工具未正确读取默认规则,手动给profile参数补充style和explode字段即可,修改后的参数定义如下:
profile:
  name: profile
  description: profile type either field or summary
  in: path
  required: true
  style: simple
  explode: false
  schema:
    type: string
    enum: [ field, summary ]

对应接口路径定义无需调整,保持原有写法即可:

/v1/metrics/{profile}:
  parameters:
    - $ref: "#/components/parameters/profile"
  get:
    summary: Get list of field or summary profile metrics
    description: Retrieves list of metrics for field or summary profile
    tags:
      - profile-metrics
    responses:
      '200':
        description: OK
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ProfileMetrics"
      '400':
        $ref: "#/components/responses/BadRequest"
      '404':
        $ref: "#/components/responses/NotFound"
      default:
        $ref: "#/components/responses/UnexpectedError"
  • 私有化部署Swagger UI的场景下,可通过请求拦截器统一修正路径参数格式,无需修改OpenAPI定义。在Swagger UI初始化配置中添加拦截逻辑,自动替换路径中被URL编码的多余引号:
const ui = SwaggerUIBundle({
  // 保留原有url、dom_id、presets等基础配置
  requestInterceptor: (request) => {
    request.url = request.url.replace(/%22([a-zA-Z0-9_-]+)%22/g, '$1')
    return request
  }
})
  • 排查Swagger UI版本:3.18.x~3.22.x区间的版本存在路径枚举值序列化的已知bug,升级到3.23.0及以上稳定版本,无需额外修改配置即可自动修复问题。

注意:无需为适配该问题调整后端接口的参数接收逻辑,问题仅存在于API文档工具的前端参数序列化层,后端保持原有纯字符串枚举值(field/summary)的接收逻辑即可。

内容的提问来源于stack exchange,提问作者Akshay Hazari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 02:57:21