You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

41 lines
1.3 KiB
Python

import logging
from fastapi import FastAPI, Request
from fastapi.exceptions import RequestValidationError
from fastapi.responses import JSONResponse
from entity.dto import HttpResp
from .base import AppException
logger = logging.getLogger(__name__)
def configure_exception(app: FastAPI):
"""配置全局异常处理
"""
@app.exception_handler(AppException)
async def app_exception_handler(request: Request, exc: AppException):
"""处理自定义异常
code: .
"""
if exc.echo_exc:
logging.error('app_exception_handler: url=[%s]', request.url.path)
logging.error(exc, exc_info=True)
return JSONResponse(
status_code=200,
content={'code': exc.code, 'message': exc.msg, 'data': False})
@app.exception_handler(RequestValidationError)
async def validation_exception_handler(request: Request, exc: RequestValidationError):
return JSONResponse(
status_code=422,
content={"detail": exc.errors(), "body": exc.body}
)
@app.exception_handler(Exception)
async def global_exception_handler(request: Request, exc: Exception):
return JSONResponse(
status_code=200,
content={'code': HttpResp.SYSTEM_ERROR.code, 'msg': HttpResp.SYSTEM_ERROR.msg})