2025-08-24 15:40:06 +02:00

43 lines
1.3 KiB
Python

from fastapi import Request
from fastapi.exceptions import ResponseValidationError
from fastapi.responses import JSONResponse
from app.exception_handlers.base import BaseExceptionHandler
class ResponseValidationExceptionHandler(BaseExceptionHandler):
"""Handles response validation exceptions."""
@classmethod
async def handle_exception(
cls, request: Request, exc: ResponseValidationError
) -> JSONResponse:
request_info = await cls.extract_request_info(request)
errors = exc.errors()
# Check if this is a None/null response case
is_none_response = False
for error in errors:
if error.get("input") is None and "valid dictionary" in error.get(
"msg", ""
):
is_none_response = True
break
await cls.log_error(
"Response validation error occurred",
request_info,
validation_errors=errors,
is_none_response=is_none_response,
)
if is_none_response:
return JSONResponse(
status_code=404,
content={"no_response": "The requested resource was not found"},
)
else:
return JSONResponse(
status_code=422, content={"response_format_error": errors}
)