python
data_error
ai_generated
true
运行时错误:请求体不是JSON:'invalid json'
RuntimeError: Body is not JSON: 'invalid json'
ID: python/starlette-request-body-parsing-error
80%修复率
84%置信度
0证据数
2024-09-18首次发现
版本兼容性
| 版本 | 状态 | 引入 | 弃用 | 备注 |
|---|---|---|---|---|
| 3.x | active | — | — | — |
根因分析
请求体包含无效的JSON格式,但Starlette尝试解析为JSON
English
请求体包含无效的JSON格式,但Starlette尝试解析为JSON
解决方案
-
90% 成功率 在路由中处理JSON解析异常
from starlette.responses import JSONResponse async def endpoint(request): try: data = await request.json() except ValueError: return JSONResponse({'error': 'Invalid JSON'}, status_code=400) -
85% 成功率 使用中间件验证请求体格式
from starlette.middleware.base import BaseHTTPMiddleware class JSONValidationMiddleware(BaseHTTPMiddleware): async def dispatch(self, request, call_next): if request.headers.get('content-type') == 'application/json': body = await request.body() import json try: json.loads(body) except json.JSONDecodeError: return JSONResponse({'error': 'Invalid JSON'}, status_code=400) return await call_next(request)
无效尝试
常见但无效的做法:
-
在请求中手动解析JSON
50% 失败
Starlette自动尝试解析JSON,手动解析会重复
-
忽略错误并返回空数据
40% 失败
异常在解析时抛出,无法继续处理