Oct*_*per 5 python http-status-code-422 pydantic fastapi
如何仅针对 FastAPI 中的一条路由将 422 标准异常替换为自定义异常?
我不想替换应用项目,只想替换一条路线。我读了很多文档,但我不明白如何做到这一点。
我需要更改异常的路线示例422:
from fastapi import APIRouter
from pydantic import BaseModel
router = APIRouter()
class PayloadSchema(BaseModel):
value_int: int
value_str: str
@router.post('/custom')
async def custom_route(payload: PayloadSchema):
return payload
Run Code Online (Sandbox Code Playgroud)
您可以向路由器注册多个错误处理程序。您可以重新声明默认处理程序,然后根据路径选择调用它:
class PayloadSchema(BaseModel):
value_int: int
value_str: str
router = APIRouter()
@router.post('/standard')
async def standard_route(payload: PayloadSchema):
return payload
@app.exception_handler(RequestValidationError)
async def standard_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}),
)
@router.post('/custom')
async def custom_route(payload: PayloadSchema):
return payload
@app.exception_handler(RequestValidationError)
async def custom_exception_handler(request: Request, exc: RequestValidationError):
if (request.url.path == '/custom'):
return JSONResponse({"error": "Bad request, must be a valid PayloadSchema format"}, status_code=400)
else:
return await standard_validation_exception_handler(request, exc)
app = FastAPI()
app.include_router(router)
app.add_exception_handler(RequestValidationError, custom_exception_handler)
Run Code Online (Sandbox Code Playgroud)
或者您可以直接使用@app.exception_handler装饰器而不需要路由器(请参阅 FastAPI 文档)。
| 归档时间: |
|
| 查看次数: |
1819 次 |
| 最近记录: |