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. :
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
Dans votre gestionnaire de point de terminaison :
@app.post('/ethAddress') def add_eth_addr(item: Item): return item
Cela nécessite que le corps JSON soit au format suivant :
{ "eth_addr": "some addr" }
Dans votre demande de récupération JavaScript :
//... headers: { 'Accept': 'application/json', 'Content-Type': 'application/json' }, body: JSON.stringify({ "eth_addr": "some addr" }), //...
from fastapi import Body @app.post('/ethAddress') def add_eth_addr(eth_addr: str = Body()): return {'eth_addr': eth_addr}
Cela permet la publication directe des données JSON sous forme de chaîne :
"some addr"
En JavaScript :
//... headers: { 'Accept': 'application/json', 'Content-Type': 'application/json' }, body: JSON.stringify("some addr"), //...
from fastapi import Body @app.post('/ethAddress') def add_eth_addr(eth_addr: str = Body(embed=True)): return {'eth_addr': eth_addr}
Cela attend le corps JSON dans le même format que l'option 2 :
{ "eth_addr": "some addr" }
En JavaScript :
//... headers: { 'Accept': 'application/json', 'Content-Type': 'application/json' }, body: JSON.stringify({ "eth_addr": "some addr" }), //...
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!