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

如何在FastAPI的Swagger表单中以JSON格式发送凭证?

解决FastAPI Swagger UI以JSON格式发送登录凭证的问题

问题原因

你遇到的422 Unprocessable Entity错误,是因为Swagger UI默认发送的请求格式(表单格式)与你的接口期望的application/json格式不匹配。你的接口通过Login这个Pydantic模型定义了JSON请求体,但Swagger UI未正确识别这一点,转而用form-data或x-www-form-urlencoded格式发送数据,导致接口无法解析凭证。

解决方法

只需显式指定请求体参数为JSON类型,让FastAPI明确告知Swagger UI使用JSON格式发送数据:

修改路由代码

在登录接口的参数中,用fastapi.Body显式包裹Login模型:

from fastapi import Body, Depends
from sqlalchemy.orm import Session
# 导入你的Login模型、db依赖和路由等

@router.post('/login')
def login(request: Login = Body(...), db: Session = Depends(get_db)):
    user = db.query(models.User).filter(models.User.email == request.email).first()
    if not user:
        # 你的逻辑代码
    # 后续逻辑

验证效果

重启FastAPI服务后,打开Swagger UI(默认地址http://127.0.0.1:5000/docs):

  • 点击/login接口的Try it out按钮,此时会显示JSON格式的输入框,而非单独的email、password表单字段
  • 输入符合格式的JSON数据:
    {
      "email": "johny@gmail.com",
      "password": "abc"
    }
    
  • 发送请求即可正常获取access_token

补充说明

curl请求正常是因为你明确指定了Content-Type: application/json并发送了JSON结构数据,而显式使用Body(...)可以强制Swagger UI遵循接口定义的请求格式,避免格式不匹配的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 16:35:23