bash_problem_search/app/exception_handlers.py

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()
)