Comment résoudre l'erreur 422 de FastAPI lors de l'envoi de données JSON via des requêtes POST
L'erreur 422 d'entité non traitable se produit généralement lorsque la charge utile d'une requête est syntaxiquement correct, mais cela ne correspond pas aux attentes du serveur. Dans ce cas spécifique, vous rencontrez cette erreur car votre requête tente d'envoyer des données JSON à un point de terminaison qui prévoit de recevoir des données en tant que paramètres de requête.
Pour résoudre ce problème, il existe plusieurs approches disponible :
Option 1 : Utiliser Pydantic Modèles
from pydantic import BaseModel class User(BaseModel): user: str @app.post('/') def main(user: User): return user
Option 2 : Utiliser les paramètres de corps
from fastapi import Body @app.post('/') def main(user: str = Body(..., embed=True)): return {'user': user}
Option 3 : Utiliser le type de dict
from typing import Dict, Any @app.post('/') def main(payload: Dict[Any, Any]): return payload
Option 4 : accéder directement au corps de la demande
from fastapi import Request @app.post('/') async def main(request: Request): return await request.json()
Test des options
Utiliser les « requêtes » Python Bibliothèque :
import requests url = 'http://127.0.0.1:8000/' payload = {'user': 'foo'} resp = requests.post(url=url, json=payload) print(resp.json())
Utilisation de l'API Fetch de JavaScript :
fetch('/', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({'user': 'foo'}) }).then(resp => resp.json()) .then(data => { console.log(data); }) .catch(error => { console.error(error); });
En sélectionnant et en implémentant l'une de ces approches, vous pouvez gérer avec succès les données JSON dans votre point de terminaison FastAPI, résolvant l'erreur 422.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!