FastAPI Swagger UI响应Schema显示字段别名而非原字段名的解决方法咨询
FastAPI Swagger UI响应Schema显示字段别名而非原字段名的解决方法咨询
我现在遇到了FastAPI搭配Pydantic的一个问题,先把我的代码贴出来:
from fastapi import FastAPI from fastapi.routing import APIRouter from pydantic import BaseModel, Field from typing import Optional app = FastAPI() router = APIRouter() class UserSchema(BaseModel): user_name: Optional[str] = Field(None, alias="name") class Config: populate_by_name = True @router.get( "/user", tags=["user"], summary="Get user", response_model=UserSchema, response_model_by_alias = False ) async def get_user(): user_data = {"name": "John Doe"} return UserSchema(**user_data).model_dump()
当前行为
- API响应:是正确的,返回内容如下:
{ "user_name": "John Doe" }
- Swagger UI响应Schema:不符合预期,它显示的是字段别名而非原字段名,具体展示如下:
{ "name": "string" }
预期行为
我希望Swagger UI(即OpenAPI响应Schema)能显示原字段名user_name,而不是别名name。
我已经尝试过的方法
- 序列化响应时使用
by_alias=False:
async def get_user(): user_data = {"name": "John Doe"} return UserSchema(**user_data).model_dump(by_alias=False)
- 在Pydantic模型的
Config类中添加populate_by_name = True(代码中已配置):
class UserSchema(BaseModel): user_name: Optional[str] = Field(None, alias="name") class Config: populate_by_name = True
- 在路由装饰器中设置
response_model_by_alias = False(代码中已配置):
@router.get( "/user", tags=["user"], summary="Get user", response_model=UserSchema, response_model_by_alias = False )
想问下大家,该如何配置FastAPI才能让Swagger UI显示原字段名user_name而非别名name呢?
备注:内容来源于stack exchange,提问作者aiktun
相关产品推荐
相关产品推荐

