Beim Erstellen einer API mit FastAPI weist die Anwendung einen Fehler auf Code 422 (Unverarbeitbare Entität) beim Senden von JSON-Daten über eine POST-Anfrage. GET-Anfragen funktionieren hingegen reibungslos. Dieses Problem besteht trotz Versuchen, JSON zu analysieren, UTF-8-Codierung zu verwenden oder HTTP-Header zu ändern, weiterhin.
Eine Antwort mit dem Statuscode 422 zeigt an ein Fehler bei den übermittelten Daten, häufig aufgrund fehlender oder falsch formatierter Elemente. In diesem Fall liegt das Problem am erwarteten Format der POST-Anfrage. Standardmäßig erwartet FastAPI Benutzereingaben als Abfrageparameter und nicht als JSON-Nutzlast. Folglich führt der Versuch des Clients, JSON-Daten zu übertragen, zum Fehler 422.
Die folgenden vier Optionen bieten unterschiedliche Ansätze zur korrekten Definition eines Endpunkts verarbeitet JSON-Daten aus einer POST-Anfrage:
Durch die Verwendung von Pydantic-Modellen können Sie eine erwartete Datenstruktur für Ihren Endpunkt angeben.
from pydantic import BaseModel class User(BaseModel): user: str @app.post('/') def main(user: User): return user
Diese Methode nutzt den speziellen „embed“-Parameter, um den Body als einen einzelnen Parameter zu behandeln.
from fastapi import Body @app.post('/') def main(user: str = Body(..., embed=True)): return {'user': user}
Obwohl dieser Ansatz weniger empfohlen wird, definiert er ein Schlüssel-Wert-Paar als Dict-Typ.
from typing import Dict, Any @app.post('/') def main(payload: Dict[Any, Any]): return payload
Diese Option beinhaltet die Verwendung des Request-Objekts zum Parsen der empfangenen JSON-Daten.
from fastapi import Request @app.post('/') async def main(request: Request): return await request.json()
Um die bereitgestellten Lösungen zu testen, befolgen Sie die Anweisungen Schritte:
import requests url = 'http://127.0.0.1:8000/' payload ={'user': 'foo'} resp = requests.post(url=url, json=payload) print(resp.json())
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); });
Das obige ist der detaillierte Inhalt vonFastAPI POST Request Error 422: Wie gehe ich richtig mit JSON-Daten um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!