diff --git a/ruoyi-fastapi-backend/exceptions/exception.py b/ruoyi-fastapi-backend/exceptions/exception.py index 28c39a6..0a94948 100644 --- a/ruoyi-fastapi-backend/exceptions/exception.py +++ b/ruoyi-fastapi-backend/exceptions/exception.py @@ -28,6 +28,16 @@ class PermissionException(Exception): self.message = message +class ServiceException(Exception): + """ + 自定义服务异常ServiceException + """ + + def __init__(self, data: str = None, message: str = None): + self.data = data + self.message = message + + class ModelValidatorException(Exception): """ 自定义模型校验异常ModelValidatorException diff --git a/ruoyi-fastapi-backend/exceptions/handle.py b/ruoyi-fastapi-backend/exceptions/handle.py index d394542..b4ad02b 100644 --- a/ruoyi-fastapi-backend/exceptions/handle.py +++ b/ruoyi-fastapi-backend/exceptions/handle.py @@ -1,7 +1,8 @@ from fastapi import FastAPI, Request from fastapi.exceptions import HTTPException from pydantic_validation_decorator import FieldValidationError -from exceptions.exception import AuthException, PermissionException, ModelValidatorException +from exceptions.exception import AuthException, PermissionException, ServiceException, ModelValidatorException +from utils.log_util import logger from utils.response_util import ResponseUtil, JSONResponse, jsonable_encoder @@ -19,14 +20,22 @@ def handle_exception(app: FastAPI): async def permission_exception_handler(request: Request, exc: PermissionException): return ResponseUtil.forbidden(data=exc.data, msg=exc.message) + # 自定义服务异常 + @app.exception_handler(ServiceException) + async def service_exception_handler(request: Request, exc: ServiceException): + logger.warning(exc.message) + return ResponseUtil.failure(data=exc.data, msg=exc.message) + # 自定义模型检验异常 @app.exception_handler(ModelValidatorException) async def model_validator_exception_handler(request: Request, exc: ModelValidatorException): + logger.warning(exc.message) return ResponseUtil.failure(data=exc.data, msg=exc.message) # 自定义字段检验异常 @app.exception_handler(FieldValidationError) async def field_validation_error_handler(request: Request, exc: FieldValidationError): + logger.warning(exc.message) return ResponseUtil.failure(msg=exc.message) # 处理其他http请求异常 @@ -36,3 +45,9 @@ def handle_exception(app: FastAPI): content=jsonable_encoder({"code": exc.status_code, "msg": exc.detail}), status_code=exc.status_code ) + + # 处理其他异常 + @app.exception_handler(Exception) + async def exception_handler(request: Request, exc: Exception): + logger.exception(exc) + return ResponseUtil.error(msg=str(exc))