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

如何在Swagger UI 3.x中通过OpenAPI 2.0 YAML设置非默认请求体内容类型

解决Swagger UI 3.x不显示自定义请求体内容类型的问题

首先得确认你的Swagger 2.0 YAML配置是正确的——一定要把consumes字段放在操作(operation)级别(操作级配置会覆盖全局配置),示例如下:

swagger: '2.0'
info:
  title: FHIR API
  version: 1.0.0
paths:
  /Patient:
    post:
      summary: 创建FHIR患者资源
      # 操作级consumes,明确指定自定义媒体类型
      consumes:
        - application/json+fhir
        - application/xml+fhir
      parameters:
        - name: patientResource
          in: body
          required: true
          description: 待创建的FHIR患者资源
          schema:
            $ref: '#/definitions/Patient'
      responses:
        201:
          description: 患者资源创建成功

如果YAML配置没问题但Swagger UI仍只显示application/json,问题出在Swagger UI 3.x的默认逻辑:它会自动过滤掉非标准的媒体类型。你可以通过以下两种方式解决:

方法1:修改Swagger UI初始化配置(推荐)

如果你是自行部署Swagger UI,在初始化SwaggerUIBundle时添加contentTypeOptions配置项,手动把自定义类型加入支持列表:

const ui = SwaggerUIBundle({
  url: '/path/to/your/swagger.yaml',
  dom_id: '#swagger-ui',
  presets: [
    SwaggerUIBundle.presets.apis,
    SwaggerUIStandalonePreset
  ],
  // 关键配置:列出所有需要显示的内容类型
  contentTypeOptions: [
    'application/json+fhir',
    'application/xml+fhir',
    'application/json' // 按需保留默认类型
  ],
  // 可选:设置默认选中的内容类型
  defaultContentType: 'application/json+fhir'
})

方法2:URL参数临时调试(快速验证)

如果不想修改代码,可以开启Swagger UI的临时配置功能,在访问Swagger UI的URL后追加参数:
?config={"contentTypeOptions":["application/json+fhir","application/xml+fhir"]}

比如完整URL可能是:
http://your-swagger-ui-domain/?config={"contentTypeOptions":["application/json+fhir","application/xml+fhir"]}

这个方法适合快速验证配置逻辑,不用改动部署代码。

为什么Swagger Editor能正常显示?

Swagger Editor和Swagger UI共享部分组件,但前者对自定义媒体类型的兼容性更好,不会默认过滤非标准类型,所以你的YAML在编辑器里能正常展示所有配置的内容类型。

内容的提问来源于stack exchange,提问作者Jonny Rylands

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:15:52