Files
student_xuanke/fastapi-app/common/exception_handler.py
T

45 lines
1.7 KiB
Python
Raw Normal View History

2026-09-21 19:12:38 +08:00
from fastapi import FastAPI, Request
from fastapi.exceptions import RequestValidationError
from starlette import status
from starlette.responses import JSONResponse
# 自定义异常类
class CustomException(Exception):
def __init__(self, message: str):
self.message = message
def setup_exceptions(app: FastAPI):
@app.exception_handler(CustomException)
async def custom_exception_handler(request: Request, exc: CustomException):
return JSONResponse(
status_code=status.HTTP_200_OK, # http总是返回200
content={"code": "500", "msg": exc.message}
)
@app.exception_handler(RequestValidationError)
async def validate_exception_handler(request: Request, exc: RequestValidationError):
print("捕获到422错误:", exc.errors())
"""处理422异常"""
# 返回统一格式
return JSONResponse(
status_code=status.HTTP_200_OK, # http总是返回200
content={"code": "500", "msg": "请求参数错误"}
)
@app.exception_handler(Exception)
async def global_exception_handler(request: Request, exc: Exception):
print("捕获到系统错误:", repr(exc))
"""处理所有异常"""
# 返回统一格式
response = JSONResponse(
status_code=status.HTTP_200_OK, # http总是返回200
content={"code": "500", "msg": "系统错误"}
)
# 允许所有源(与你的 CORS 配置一致)
response.headers["Access-Control-Allow-Origin"] = "*"
response.headers["Access-Control-Allow-Methods"] = "*"
response.headers["Access-Control-Allow-Headers"] = "*"
return response