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
相关产品推荐
相关产品推荐

