40 lines
1.2 KiB
Python
40 lines
1.2 KiB
Python
# app/exception_handlers.py
|
|
from fastapi import Request
|
|
from fastapi.responses import JSONResponse
|
|
from fastapi.exceptions import RequestValidationError
|
|
from starlette.exceptions import HTTPException as StarletteHTTPException
|
|
from app.schemas.response import ResponseModel
|
|
|
|
async def validation_exception_handler(request: Request, exc: RequestValidationError):
|
|
return JSONResponse(
|
|
status_code=422,
|
|
content=ResponseModel(
|
|
msg="Validation Failed",
|
|
success=False,
|
|
data=exc.errors(), # 可视情况换成 None 或 str(exc)
|
|
code=422
|
|
).model_dump()
|
|
)
|
|
|
|
async def http_exception_handler(request: Request, exc: StarletteHTTPException):
|
|
return JSONResponse(
|
|
status_code=exc.status_code,
|
|
content=ResponseModel(
|
|
msg=exc.detail,
|
|
success=False,
|
|
data=None,
|
|
code=exc.status_code
|
|
).model_dump()
|
|
)
|
|
|
|
async def general_exception_handler(request: Request, exc: Exception):
|
|
return JSONResponse(
|
|
status_code=500,
|
|
content=ResponseModel(
|
|
msg="Internal Server Error",
|
|
success=False,
|
|
data=str(exc),
|
|
code=500
|
|
).model_dump()
|
|
)
|