在 FastAPI 应用程序中,处理错误对于向客户端提供信息丰富的响应至关重要。遇到的一个常见问题是在请求中发送附加数据或无效数据时收到 422 Unprocessable Entity 错误。本文将演示如何自定义错误响应来处理此类情况。
考虑以下 FastAPI 后端示例:
from fastapi import FastAPI app = FastAPI class Demo(BaseModel): content: str = None @app.post("/demo") async def demoFunc(d: Demo): return d.content
发送带有额外数据的请求时,例如 data = { "content": "some text here"}aaaa,API 返回 422 错误,响应如下:
{ "detail": [ { "loc": [ "body", 47 ], "msg": "Extra data: line 4 column 2 (char 47)", "type": "value_error.jsondecode", "ctx": { "msg": "Extra data", "doc": "{\n \"content\": \"some text here\"}aaaaa", "pos": 47, "lineno": 4, "colno": 2 } } ] }
要自定义错误响应,FastAPI 允许覆盖请求验证异常处理程序。首先导入必要的模块并定义自定义异常处理函数:
from fastapi import FastAPI, Body, Request, status from fastapi.encoders import jsonable_encoder from fastapi.exceptions import RequestValidationError from fastapi.responses import JSONResponse app = FastAPI() @app.exception_handler(RequestValidationError) async def validation_exception_handler(request: Request, exc: RequestValidationError): return JSONResponse( status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, content=jsonable_encoder({ "detail": exc.errors(), "body": exc.body, "custom msg": { "Your error message" } }), )
此函数拦截 RequestValidationError 异常并生成自定义的 JSON 响应。您可以包含错误详细信息、请求正文和任何自定义消息。
例如,使用无效的 JSON 正文现在将导致类似于以下内容的响应:
{ "detail": [ { "loc": ["body", 1], "msg": "invalid json", "type": "json.decoder.JSONDecodeError", "ctx": {} } ], "body": {}, "custom msg": { "Your error message" } }
或者,您可以返回仅包含错误消息的纯文本响应:
from fastapi.responses import PlainTextResponse @app.exception_handler(RequestValidationError) async def validation_exception_handler(request, exc): return PlainTextResponse(str(exc), status_code=422)
通过自定义 FastAPI 中的错误响应行为,您可以为 API 提供更多信息且一致的错误处理。这改善了用户体验并简化了开发人员和 API 使用者的调试。
以上是如何在 FastAPI 中自定义无效请求的错误响应?的详细内容。更多信息请关注PHP中文网其他相关文章!