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

FastAPI DELETE请求报错:Unsupported upgrade request及请求体缺失问题

FastAPI DELETE接口Java调用报422问题解决

问题本质

虽然Java日志显示发送了JSON请求体,但FastAPI返回Field required错误,说明实际请求中FastAPI并未接收到请求体。同时出现的WebSocket警告属于干扰项,和当前问题无关(大概率是Java请求误带了Upgrade头导致)。

核心原因&解决办法

1. Java端未设置正确的请求头

FastAPI需要Content-Type: application/json头才能识别JSON格式的请求体,很多Java HTTP客户端在发送DELETE请求时默认不会自动添加这个头,导致FastAPI直接忽略请求体。

修复示例(以OkHttp为例):

String jsonBody = "{\"host\":\"http://localhost:9200\",\"index\":\"rag-embeddings\",\"fileEntryId\":41818}";
Request request = new Request.Builder()
    .url("http://localhost:8000/delete-file/")
    .delete(RequestBody.create(jsonBody, MediaType.get("application/json")))
    .build();

2. FastAPI对DELETE请求的body解析规则

HTTP规范允许DELETE请求带body,但FastAPI默认对DELETE请求的body处理更严格,需要显式声明Body依赖才能正确解析。

修改接口代码:

from fastapi import Body, FastAPI
from pydantic import BaseModel

app = FastAPI()

class Metadata(BaseModel):
    host: str
    index: str
    fileEntryId: int

@app.delete("/delete-file/")
async def delete_file(request: Metadata = Body(...)):
    print(f"Received request: {request}")
    # 原有业务逻辑

消除WebSocket警告(可选)

如果看着警告不舒服,要么检查Java请求是否误加了Upgrade/Connection: upgrade头并删除;要么执行pip install websockets安装依赖包,即使不用WebSocket也能消除这个提示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 00:59:54