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

FastAPI中Query参数约束未触发RequestValidationError是什么原因?

问题原因

你遇到的校验不生效问题是两个错误叠加导致的:

  1. 参数装饰器用错
    Query仅用于校验URL?后面拼接的查询参数,你定义在路由路径/items/{item_id}里的item_id属于路径参数,必须用Path装饰器声明校验规则,Query不会对路径参数做任何校验。
  2. 校验参数名写错
    FastAPI基于Pydantic做数值校验,大于等于的参数是ge而非gte,写无效的gte参数不会触发对应校验逻辑。

修正后的代码

from fastapi import FastAPI, HTTPException, Path
from fastapi.exceptions import RequestValidationError
from fastapi.responses import PlainTextResponse

app = FastAPI()

@app.exception_handler(RequestValidationError)
async def validation_exception_handler(request, exc):
    return PlainTextResponse(str(exc), status_code=400)

@app.get("/items/{item_id}")
async def read_item(item_id: int = Path(ge=1)):             
    if item_id == 3:
        raise HTTPException(status_code=418, detail="Nope! I don't like 3.")
    return {"item_id": item_id}

验证效果

修改后请求http://127.0.0.1:8000/items/0会直接返回400参数校验错误,符合你的预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 21:36:05