Heim > Backend-Entwicklung > Python-Tutorial > FastAPI POST Request Error 422: Wie gehe ich richtig mit JSON-Daten um?

FastAPI POST Request Error 422: Wie gehe ich richtig mit JSON-Daten um?

Patricia Arquette
Freigeben: 2025-01-03 01:19:38
Original
136 Leute haben es durchsucht

FastAPI POST Request Error 422: How to Properly Handle JSON Data?

FastAPI: Fehler 422 beim Senden von JSON-Daten per POST-Anfrage verstehen und beheben

Problembeschreibung

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.

Detaillierte Erklärung

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.

Lösungsoptionen

Die folgenden vier Optionen bieten unterschiedliche Ansätze zur korrekten Definition eines Endpunkts verarbeitet JSON-Daten aus einer POST-Anfrage:

1. Verwendung von Pydantic-Modellen

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
Nach dem Login kopieren

2. Verwenden des Body-Parameters Embed

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}
Nach dem Login kopieren

3. Verwendung eines Dict-Typs (weniger empfohlen)

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
Nach dem Login kopieren

4 . Direkte Verwendung des Request-Objekts

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()
Nach dem Login kopieren

Testen der Lösungen

Um die bereitgestellten Lösungen zu testen, befolgen Sie die Anweisungen Schritte:

Python-Anforderungsbibliothek verwenden

import requests

url = 'http://127.0.0.1:8000/'
payload ={'user': 'foo'}
resp = requests.post(url=url, json=payload)
print(resp.json())
Nach dem Login kopieren

JavaScript-Abruf-API verwenden

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);
    });
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage