Maison > développement back-end > Tutoriel Python > Comment corriger les erreurs « 422 Entité non traitable » lors de l'envoi de données JSON de JavaScript vers FastAPI ?

Comment corriger les erreurs « 422 Entité non traitable » lors de l'envoi de données JSON de JavaScript vers FastAPI ?

DDD
Libérer: 2024-11-13 01:06:02
original
568 Les gens l'ont consulté

How to Fix

Dépannage des demandes de publication JSON de JavaScript vers FastAPI

Introduction

Lors de la tentative de transfert de données JSON d'une interface JavaScript vers un backend FastAPI utilisant une requête POST, vous pouvez rencontrer des messages d'erreur tels que « 422 Entité non traitable ». Cet article explique pourquoi cela se produit et propose des solutions pour résoudre le problème.

Analyse des erreurs

L'erreur indique que votre point de terminaison FastAPI backend attend un paramètre de requête, pas un Corps JSON. Par défaut, les paramètres autres que le chemin dans les points de terminaison FastAPI sont interprétés comme des paramètres de requête.

Solution

Il existe plusieurs méthodes pour résoudre ce problème et activer la publication de données JSON. :

Option 1 : Définir un modèle Pydantic

Créez un modèle Pydantic pour représenter les données JSON, par exemple :

from pydantic import BaseModel

class Item(BaseModel):
    eth_addr: str
Copier après la connexion

Dans votre gestionnaire de point de terminaison :

@app.post('/ethAddress')
def add_eth_addr(item: Item):
    return item
Copier après la connexion

Cela nécessite que le corps JSON soit au format suivant :

{
    "eth_addr": "some addr"
}
Copier après la connexion
Copier après la connexion

Dans votre demande de récupération JavaScript :

//...
headers: {
    'Accept': 'application/json',
    'Content-Type': 'application/json'
},
body: JSON.stringify({
    "eth_addr": "some addr"
}),
//...
Copier après la connexion
Copier après la connexion

Option 2 : Utiliser FastAPI Body() Tapez

from fastapi import Body

@app.post('/ethAddress')
def add_eth_addr(eth_addr: str = Body()):
    return {'eth_addr': eth_addr}
Copier après la connexion

Cela permet la publication directe des données JSON sous forme de chaîne :

"some addr"
Copier après la connexion

En JavaScript :

//...
headers: {
    'Accept': 'application/json',
    'Content-Type': 'application/json'
},
body: JSON.stringify("some addr"),
//...
Copier après la connexion

Option 3 : utiliser la fonctionnalité d'intégration de FastAPI (Recommandé pour les paramètres de corps unique)

from fastapi import Body

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

Cela attend le corps JSON dans le même format que l'option 2 :

{
    "eth_addr": "some addr"
}
Copier après la connexion
Copier après la connexion

En JavaScript :

//...
headers: {
    'Accept': 'application/json',
    'Content-Type': 'application/json'
},
body: JSON.stringify({
    "eth_addr": "some addr"
}),
//...
Copier après la connexion
Copier après la connexion

Conclusion

En suivant ces solutions, vous pouvez publier avec succès des données JSON de votre interface JavaScript vers votre point de terminaison FastAPI. N'oubliez pas de choisir l'approche qui correspond le mieux à vos besoins spécifiques.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal