UnicodeDecodeError/请求体解码失败:POST JSON 的隐形炸弹
现象
接口偶发 500,日志含 UnicodeDecodeError
或json.decoder.JSONDecodeError
。
原因 客户端未设置 Content-Type: application/json; charset=utf-8,或传了混合编码;读取 request.body 后未做异常捕获。
稳妥实现
``` import json from django.http import JsonResponse
def api_view(request): try: data = json.loads(request.body.decode("utf-8")) except (UnicodeDecodeError, json.JSONDecodeError): return JsonResponse({"error": "invalid json"}, status=400) ``` # 继续处理
DRF
用 request.data 更安全,同时在DEFAULT_PARSER_CLASSES
启用JSONParser
。
这类问题在接三方回调时高发,我在 gplpal
总结了统一的解析与兜底策略。
评论 0