47 lines
1.2 KiB
Python
47 lines
1.2 KiB
Python
from fastapi import Request, HTTPException
|
|
from fastapi.responses import JSONResponse
|
|
|
|
|
|
class AppException(Exception):
|
|
def __init__(self, code: int, message: str, detail: any = None):
|
|
self.code = code
|
|
self.message = message
|
|
self.detail = detail
|
|
|
|
|
|
async def app_exception_handler(request: Request, exc: AppException):
|
|
return JSONResponse(
|
|
status_code=200,
|
|
content={
|
|
"code": exc.code,
|
|
"message": exc.message,
|
|
"detail": exc.detail
|
|
}
|
|
)
|
|
|
|
|
|
async def http_exception_handler(request: Request, exc: HTTPException):
|
|
return JSONResponse(
|
|
status_code=exc.status_code,
|
|
content={
|
|
"code": exc.status_code,
|
|
"message": exc.detail
|
|
}
|
|
)
|
|
|
|
|
|
async def general_exception_handler(request: Request, exc: Exception):
|
|
return JSONResponse(
|
|
status_code=500,
|
|
content={
|
|
"code": 500,
|
|
"message": "服务器内部错误"
|
|
}
|
|
)
|
|
|
|
|
|
def register_exception_handlers(app):
|
|
from fastapi import FastAPI
|
|
app.add_exception_handler(AppException, app_exception_handler)
|
|
app.add_exception_handler(HTTPException, http_exception_handler)
|
|
app.add_exception_handler(Exception, general_exception_handler) |