Исключение RequestValidationError
Исключение RequestValidationError вызывается
автоматически, когда FastAPI не может привести тело запроса,
параметры пути или query-параметры к объявленной схеме.
Оно наследуется от ValidationException и содержит
список ошибок валидации, доступный через метод errors.
Чаще всего исключение обрабатывается вручную через
exception_handler, чтобы вернуть клиенту понятный ответ.
Синтаксис
from fastapi.exceptions import RequestValidationError
Пример
Давайте объявим модель и маршрут, который принимает её в теле запроса:
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class User(BaseModel):
name: str
age: int
@app.post('/user')
def create_user(user: User):
return {'name': user.name, 'age': user.age}
Если отправить корректные данные, ошибки не возникнет:
{"name": "abcde", "age": 25}
Пример
Давайте отправим в поле age строку вместо числа.
FastAPI выбросит исключение RequestValidationError
и по умолчанию вернёт статус 422:
{
"detail": [
{
"type": "int_parsing",
"loc": ["body", "age"],
"msg": "Input should be a valid integer",
"input": "abcde"
}
]
}
Пример
Давайте перехватим исключение через
exception_handler и вернём собственный ответ:
from fastapi import FastAPI, Request
from fastapi.responses import JSONResponse
from fastapi.exceptions import RequestValidationError
from pydantic import BaseModel
app = FastAPI()
class User(BaseModel):
name: str
age: int
@app.exception_handler(RequestValidationError)
def validation_handler(request: Request, exc: RequestValidationError):
return JSONResponse(
status_code=400,
content={'error': 'invalid data', 'details': exc.errors()}
)
@app.post('/user')
def create_user(user: User):
return {'name': user.name, 'age': user.age}
Теперь при некорректных данных клиент получит статус 400 и список ошибок:
{
"error": "invalid data",
"details": [
{
"type": "int_parsing",
"loc": ["body", "age"],
"msg": "Input should be a valid integer",
"input": "abcde"
}
]
}
Смотрите также
-
метод
errors,
который возвращает список ошибок валидации -
исключение
ValidationException,
которое является базовым для ошибок валидации -
исключение
WebSocketRequestValidationError,
которое возникает при валидации WebSocket-запросов -
исключение
HTTPException,
которое позволяет вернуть произвольный HTTP-ответ