fix: 重写异常处理逻辑代码
This commit is contained in:
parent
cc6faebddc
commit
722488be7b
|
|
@ -1,9 +1,12 @@
|
||||||
|
import logging
|
||||||
|
|
||||||
from fastapi import Request, status
|
from fastapi import Request, status
|
||||||
from fastapi.exceptions import HTTPException, RequestValidationError
|
from fastapi.exceptions import HTTPException, RequestValidationError
|
||||||
from fastapi.responses import JSONResponse
|
from fastapi.responses import JSONResponse
|
||||||
|
|
||||||
from src.dtos import BaseResponse, ErrorModel
|
from src.dtos import BaseResponse, ErrorModel
|
||||||
|
|
||||||
|
logger = logging.getLogger("uvicorn.error")
|
||||||
|
|
||||||
class HttpCodeMsg:
|
class HttpCodeMsg:
|
||||||
REGISTER_USER_ALREADY_EXISTS = "REGISTER_USER_ALREADY_EXISTS"
|
REGISTER_USER_ALREADY_EXISTS = "REGISTER_USER_ALREADY_EXISTS"
|
||||||
|
|
@ -24,30 +27,38 @@ class HttpCodeMsg:
|
||||||
HTTP_503 = "SERVICE_UNAVAILABLE"
|
HTTP_503 = "SERVICE_UNAVAILABLE"
|
||||||
HTTP_504 = "GATEWAY_TIMEOUT"
|
HTTP_504 = "GATEWAY_TIMEOUT"
|
||||||
|
|
||||||
|
def request_validation_error_handler(req: Request, exc: RequestValidationError):
|
||||||
def request_validation_error_handler(request: Request, exc: RequestValidationError):
|
"""
|
||||||
|
请求响应校验错误处理
|
||||||
|
:param req:
|
||||||
|
:param exc:
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
errors = exc.errors()
|
errors = exc.errors()
|
||||||
print(errors)
|
logger.error(f"{req.method} {req.url} , errors: {errors}")
|
||||||
details = []
|
response_errors = [error for error in errors if error["loc"][0] == "response"]
|
||||||
for error in errors:
|
if len(response_errors) > 0:
|
||||||
err_type = error["type"].split(".")
|
message = "接口响应异常 "
|
||||||
if len(err_type) == 2:
|
|
||||||
if err_type[0] == "value_error":
|
|
||||||
if err_type[1] == "missing":
|
|
||||||
if len(error["loc"]) == 2:
|
|
||||||
msg = f"{error['loc'][0]}: '{error['loc'][1]}' is required!"
|
|
||||||
else:
|
else:
|
||||||
msg = "value is missing!"
|
message = "接口请求异常 "
|
||||||
else:
|
json_err = [err["msg"] for err in errors if "value_error.jsondecode" == err["type"]]
|
||||||
msg = error["msg"].replace("this value", f"'{error['loc'][1]}' value")
|
if json_err:
|
||||||
else:
|
message += "请求参数JSON编码有误;"
|
||||||
msg = error["msg"]
|
value_err = [err["msg"] for err in errors if "value_error" == err["type"]]
|
||||||
details.append(msg)
|
if value_err:
|
||||||
else:
|
message += "; ".join(value_err)
|
||||||
details.append(error["msg"])
|
missing_err = [err["loc"][-1] for err in errors if "value_error.missing" == err["type"]]
|
||||||
err = dict(code=status.HTTP_400_BAD_REQUEST, messages=HttpCodeMsg.HTTP_400, details="; ".join(details))
|
if missing_err:
|
||||||
|
message += "缺少字段:{} ".format(", ".join(missing_err))
|
||||||
|
type_err = [err["msg"].replace("value", f"{err['loc'][1]}") for err in errors if "type_error" == err["type"]]
|
||||||
|
if type_err:
|
||||||
|
message += "; ".join(type_err)
|
||||||
|
not_none_err = [err["loc"][-1] for err in errors if "type_error.none.not_allowed" == err["type"]]
|
||||||
|
if not_none_err:
|
||||||
|
message += "字段:{} 不能为空".format(", ".join(not_none_err))
|
||||||
|
err = dict(code=status.HTTP_400_BAD_REQUEST, message=message, details=message)
|
||||||
res = BaseResponse(**dict(result=None, error=err))
|
res = BaseResponse(**dict(result=None, error=err))
|
||||||
return JSONResponse(status_code=status.HTTP_400_BAD_REQUEST, content=res.dict())
|
return JSONResponse(status_code=200, content=res.dict())
|
||||||
|
|
||||||
|
|
||||||
def http_exception_handler(request: Request, exc: HTTPException):
|
def http_exception_handler(request: Request, exc: HTTPException):
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue