fix: обработчик 422 — актуальная константа статуса и сериализация ctx ошибок валидации

Без jsonable_encoder ValueError из field_validator давал 500 вместо 422;
HTTP_422_UNPROCESSABLE_ENTITY помечена устаревшей в starlette.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
Andrey Epifancev 2026-10-03 22:26:18 +04:00
parent aaf9490a8d
commit 953d978cc7

View File

@ -1,4 +1,5 @@
from fastapi import FastAPI, HTTPException, Request, status
from fastapi.encoders import jsonable_encoder
from fastapi.exceptions import RequestValidationError
from fastapi.responses import JSONResponse
from sqlalchemy.exc import IntegrityError, SQLAlchemyError
@ -8,8 +9,9 @@ def register_exception_handlers(app: FastAPI) -> None:
@app.exception_handler(RequestValidationError)
async def request_validation_exception_handler(_: Request, exc: RequestValidationError):
return JSONResponse(
status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
content={"detail": exc.errors()},
status_code=status.HTTP_422_UNPROCESSABLE_CONTENT,
# ctx ошибки может содержать исключение (ValueError из валидатора) — сериализуем через jsonable_encoder
content={"detail": jsonable_encoder(exc.errors())},
)
@app.exception_handler(IntegrityError)