45 lines
1.7 KiB
Python
45 lines
1.7 KiB
Python
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
|