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

FastAPI POST接口接收JSON格式整数参数失败的原因咨询

FastAPI POST接口接收JSON格式整数参数失败的原因咨询

嗨,我来帮你梳理清楚这个问题的根源~

你的疑惑核心在于FastAPI对不同类型参数的默认解析规则差异,咱们一步步拆解:

为什么/ints接口用JSON传参失败?

在你的endpoints.py里,/ints接口的定义是:

@app.post('/ints')
def post_int(x: int, y: int):
    return x, y

FastAPI默认会把单个基本类型(int、str、bool这类)的参数识别为查询参数(Query Parameters),也就是只会从URL的查询字符串(?x=1&y=2这种格式)里读取值,不会去解析请求体里的JSON内容。这就是为什么你用JSON传参时,会收到“x和y缺失”的错误提示。

为什么/lists接口用JSON传参却正常?

再看/lists接口的定义:

@app.post('/lists')
def post_list(x: list[int], y: list[int]):
    return x, y

对于复杂类型(list、dict这类)的参数,FastAPI默认会把它们识别为**请求体(Request Body)**参数,会自动从JSON请求体里读取对应字段的值,所以你的JSON请求能正常生效。

怎么让/ints接口支持JSON传参?

有两种常用的解决方式,你可以根据需求选择:

方式1:用Body明确指定参数来源

修改endpoints.py的/ints接口,通过Body依赖告诉FastAPI要从请求体里读取这两个参数:

from fastapi import FastAPI, Body

app = FastAPI()

@app.post('/ints')
def post_int(x: int = Body(), y: int = Body()):
    return x, y

方式2:用Pydantic模型定义请求体(更推荐)

如果后续参数可能增多,用Pydantic模型来封装请求体是更规范的做法:

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

# 定义请求体的模型
class IntRequest(BaseModel):
    x: int
    y: int

@app.post('/ints')
def post_int(data: IntRequest):
    return data.x, data.y

修改后,你原来的requests.py里的JSON请求就能正常返回结果了。

补充说明FastAPI的参数解析逻辑

FastAPI会自动根据参数的类型和装饰器来推断参数来源:

  • 单个基本类型 → 默认查询参数
  • 复杂类型/自定义模型 → 默认请求体参数
  • 如果需要改变默认规则,可以用Query(指定为查询参数)、Body(指定为请求体)、Path(指定为路径参数)这些工具类来明确声明。

备注:内容来源于stack exchange,提问作者Jay

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 18:58:11