FastAPI POST请求报错:Input should be a valid dictionary or object
问题分析与解决
错误原因
- 请求格式不匹配:你用
curl -d发送的是表单格式数据,但FastAPI默认期望JSON格式的请求体,未指定Content-Type头导致解析失败。 - 代码拼写错误:函数返回的
promt是拼写错误,正确应为prompt。 - 参数声明问题:
prompt: Prompt = None的写法可能让FastAPI对请求体的解析逻辑混乱,建议明确参数类型。
修正后的代码
from pydantic import BaseModel from fastapi import FastAPI from typing import Optional # 可选,用于允许请求体为空 app = FastAPI() class Prompt(BaseModel): content: str = "" @app.post("/query") def query_item(prompt: Prompt): # 去掉默认None,明确为必填请求体 return prompt # 修正拼写错误
如果需要允许请求体可选(即可以不传),可调整为:
@app.post("/query") def query_item(prompt: Optional[Prompt] = None): return prompt
正确的curl请求命令
添加-H "Content-Type: application/json"指定请求格式:
curl -X POST "http://localhost:8000/query" -H "Content-Type: application/json" -d '{"content":"Hello"}'
requests包的正确调用示例
import requests url = "http://localhost:8000/query" data = {"content": "Hello"} response = requests.post(url, json=data) # 使用json参数自动设置Content-Type并序列化数据 print(response.json())
内容的提问来源于stack exchange,提问作者Hanchen Wang
相关产品推荐
相关产品推荐

