api/app/core/exceptions.py
2025-04-09 11:06:26 +08:00

46 lines
1.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from fastapi import HTTPException, Request
from fastapi.responses import JSONResponse
from fastapi.exceptions import RequestValidationError
from app.schemas.response import ErrorResponse
class BusinessError(Exception):
"""业务错误异常,使用标准响应格式"""
def __init__(self, message: str, code: int = 500):
self.message = message
self.code = code
super().__init__(self.message)
# 业务异常处理器
async def business_exception_handler(request: Request, exc: BusinessError):
"""将业务异常转换为标准响应格式"""
return JSONResponse(
status_code=200, # 返回200状态码但在响应内容中设置业务错误码
content=ErrorResponse(
code=exc.code,
message=exc.message
).model_dump()
)
# 请求验证错误处理器
async def validation_exception_handler(request: Request, exc: RequestValidationError):
"""将请求验证错误转换为标准错误响应"""
error_messages = []
for error in exc.errors():
loc = error.get("loc", [])
loc_str = " -> ".join(str(l) for l in loc)
error_messages.append(f"{loc_str}: {error.get('msg')}")
error_message = ", ".join(error_messages)
return JSONResponse(
status_code=422, # 保持422状态码表示验证错误
content=ErrorResponse(
code=422,
message=f"请求参数验证错误: {error_message}"
).model_dump()
)
def add_exception_handlers(app):
"""添加异常处理器到FastAPI应用"""
app.add_exception_handler(BusinessError, business_exception_handler)
app.add_exception_handler(RequestValidationError, validation_exception_handler)