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

FastAPI:如何让IntEnum在openapi.json生成带键的可读枚举模式?

自定义IntEnum生成OpenAPI枚举格式的需求

场景说明

我定义了如下Python IntEnum类:

from enum import IntEnum

class Role(IntEnum):
    client = 1
    manager = 2
    admin = 3

当前生成的openapi.json中该枚举的输出为:

{
  "enum": [1, 2, 3],
  "title": "Role",
  "type": "integer"
}

我需要生成的自定义格式为:

{
  "enum": {
    "client": 1,
    "manager": 2,
    "admin": 3
  },
  "title": "Role",
  "type": "integer"
}

可行方案

可以实现,但要明确:OpenAPI官方规范中enum字段的标准类型是数组,这种对象格式属于自定义扩展,可能不兼容部分OpenAPI生态工具(如Swagger UI、Redoc)。

具体实现方式分工具场景:

  • 若使用FastAPI/Starlette:编写自定义OpenAPI生成钩子,遍历生成的Schema结构,定位到Role对应的Schema节点,将原有enum数组替换为枚举成员名与值的键值对对象。
  • 若使用其他OpenAPI生成库:扩展库的枚举序列化逻辑,重写枚举的输出方法,把枚举的成员映射转换为对象格式输出。

如果仅用于内部特定场景,无需兼容通用OpenAPI工具,这个修改完全可行。

内容的提问来源于stack exchange,提问作者Mike Artemiev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 23:53:12