python data_error ai_generated true

运行时错误:请求体不是JSON:'invalid json'

RuntimeError: Body is not JSON: 'invalid json'

ID: python/starlette-request-body-parsing-error

其他格式: JSON · Markdown 中文 · English
80%修复率
84%置信度
0证据数
2024-09-18首次发现

版本兼容性

版本状态引入弃用备注
3.x active

根因分析

请求体包含无效的JSON格式,但Starlette尝试解析为JSON

English

请求体包含无效的JSON格式,但Starlette尝试解析为JSON

generic

解决方案

  1. 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)
  2. 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)

无效尝试

常见但无效的做法:

  1. 在请求中手动解析JSON 50% 失败

    Starlette自动尝试解析JSON,手动解析会重复

  2. 忽略错误并返回空数据 40% 失败

    异常在解析时抛出,无法继续处理