如何修改FastAPI接口以接收JSON格式的单个POST参数?
解决方案
问题出在你的FastAPI接口默认将text参数解析为查询参数(URL里的?text=xxx),而非从JSON请求体中读取字段。要支持JSON请求体,可通过以下两种方式修改:
方式一:使用Pydantic模型(推荐,适配复杂请求结构)
FastAPI推荐用Pydantic模型定义请求体结构,既规范又能自动生成接口文档:
from fastapi import FastAPI from pydantic import BaseModel app = FastAPI() # 假设classifier已提前加载完成 classifier = pipeline(path_to_model) # 定义请求体模型 class TextRequest(BaseModel): text: str @app.post("/predictions") def extract_predictions(request: TextRequest): processed_text = request.text.lower() predictions = classifier(processed_text) return { "text_message": processed_text, "predictions": predictions }
方式二:直接使用Body参数(适合简单单字段场景)
如果请求体仅包含单个字段,也可通过Body参数指定从JSON请求体读取:
from fastapi import FastAPI, Body app = FastAPI() classifier = pipeline(path_to_model) @app.post("/predictions") def extract_predictions(text: str = Body(...)): processed_text = text.lower() predictions = classifier(processed_text) return { "text_message": processed_text, "predictions": predictions }
验证方法
修改完成后,用Postman/Insomnia发送POST请求到http://localhost:8000/predictions,请求体选择JSON格式,内容填写:
{"text": "your input string here"}
即可正常获取包含预测结果的响应。
内容的提问来源于stack exchange,提问作者math_guy_shy
相关产品推荐
相关产品推荐

