FastAPI中基于Pydantic Schema动态生成GET查询参数的实现问题
FastAPI 基于Pydantic模型定义GET查询参数解决方案
报错原因
你当前写法触发422错误的核心原因是两点:
- 接口参数
inputs没有添加MySchema类型注解,FastAPI无法识别这是需要自动解析的Pydantic模型 - 直接将
MySchema类传入Depends()时,FastAPI会默认按请求体模型解析,GET请求无请求体因此校验失败。
正确实现方式
FastAPI原生支持用Pydantic模型批量定义GET查询参数,无需引入第三方工具,只需调整写法即可:
from fastapi import FastAPI, Depends, APIRouter from pydantic import BaseModel # Python3.9及以下版本需额外导入Optional # from typing import Optional router = APIRouter() app = FastAPI() class MySchema(BaseModel): # Python3.9及以下版本写法:a: Optional[int] = None a: int | None = None # Python3.9及以下版本写法:b: Optional[str] = None b: str | None = None @router.get("/findStuff") def get_stuff(inputs: MySchema = Depends()): return inputs app.include_router(router)
验证效果
发起请求GET /findStuff?a=123&b=test会正常返回结果:
{"a":123,"b":"test"}
该写法同时会自动在OpenAPI文档生成对应的查询参数说明,字段类型校验逻辑也会正常生效。
内容的提问来源于stack exchange,提问作者Victor
相关产品推荐
相关产品推荐

