如何在 FastAPI 中自定义无效请求的错误响应?

Susan Sarandon
发布: 2024-10-21 06:25:03
原创
610 人浏览过

How to Customize Error Responses for Invalid Requests in FastAPI?

FastAPI 中的自定义错误响应处理

在 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中文网其他相关文章!

来源:php
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!