Maison > développement back-end > Tutoriel Python > Comment corriger l'erreur 422 de FastAPI lors de la publication de données JSON ?

Comment corriger l'erreur 422 de FastAPI lors de la publication de données JSON ?

Patricia Arquette
Libérer: 2024-12-17 01:24:24
original
655 Les gens l'ont consulté

How to Fix FastAPI's 422 Error When POSTing JSON Data?

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

  • Les modèles Pydantic vous permettent de spécifier la structure de données attendue pour le point de terminaison. L'extrait de code ci-dessous illustre comment définir un point de terminaison qui accepte les données JSON représentées sous forme de modèle Pydantic :
from pydantic import BaseModel

class User(BaseModel):
    user: str

@app.post('/')
def main(user: User):
    return user
Copier après la connexion

Option 2 : Utiliser les paramètres de corps

  • Si les modèles Pydantic ne sont pas souhaités, vous pouvez exploiter les paramètres Body. Le paramètre « Corps » intégré vous permet d'intégrer le corps de la requête dans la signature de la fonction :
from fastapi import Body

@app.post('/')
def main(user: str = Body(..., embed=True)):
    return {'user': user}
Copier après la connexion

Option 3 : Utiliser le type de dict

  • Une autre méthode, bien que moins recommandée, consiste à utiliser un type Dict pour définir des paires clé-valeur. Cependant, cette technique ne prend pas en charge les validations personnalisées :
from typing import Dict, Any

@app.post('/')
def main(payload: Dict[Any, Any]):
    return payload
Copier après la connexion

Option 4 : accéder directement au corps de la demande

  • L'objet Request de Starlette permet d'accéder directement au corps de la demande. accès au corps de la requête JSON analysé à l'aide de wait request.json(). Cependant, cette approche n'offre pas de validations personnalisées et nécessite l'utilisation de async def pour la définition du point de terminaison :
from fastapi import Request

@app.post('/')
async def main(request: Request):
    return await request.json()
Copier après la connexion

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())
Copier après la connexion

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);
    });
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal