Heim > Web-Frontend > js-Tutorial > Wie gehe ich mit dem 422-Fehler von FastAPI beim Empfang von JSON-POST-Anfragen um?

Wie gehe ich mit dem 422-Fehler von FastAPI beim Empfang von JSON-POST-Anfragen um?

Susan Sarandon
Freigeben: 2024-12-16 09:26:10
Original
943 Leute haben es durchsucht

How to Handle FastAPI's 422 Error When Receiving JSON POST Requests?

FastAPI: Fehler 422 mit POST-Anfrage beim Senden von JSON-Daten

Beim Erstellen von RESTful-APIs treten häufig Probleme im Zusammenhang mit dem Datenaustausch auf, insbesondere wenn POST-Anfragen beteiligt sind . Ein solches Problem besteht darin, dass beim Versuch, JSON-Daten zu senden, der Fehler „422 Unprocessable Entity“ angezeigt wird.

Im bereitgestellten Codebeispiel:

from fastapi import FastAPI

app = FastAPI()

@app.post("/")
def main(user):
    return user
Nach dem Login kopieren

Dieser Code definiert einen POST-Endpunkt, der einen JSON erwartet Nutzlast, die einen „Benutzer“-Schlüssel enthält. Der Fehler tritt jedoch auf, wenn der HTTP-Client JSON-Daten sendet, die nicht dem erwarteten Format entsprechen. Um dieses Problem zu lösen, gibt es mehrere Optionen:

Option 1: Verwendung von Pydantic-Modellen

Pydantic-Modelle bieten eine Möglichkeit, JSON-Nutzlasten gemäß vordefinierten Schemata zu validieren und zu deserialisieren:

from pydantic import BaseModel

class User(BaseModel):
    user: str

@app.post("/")
def main(user: User):
    return user
Nach dem Login kopieren

Option 2: Verwenden von Körperparametern

Mit Körperparametern in FastAPI können Sie direkt Analysieren Sie die JSON-Nutzlast, ohne ein Pydantic-Modell zu definieren:

from fastapi import Body

@app.post("/")
def main(user: str = Body(..., embed=True)):
    return {'user': user}
Nach dem Login kopieren

Option 3: Verwenden des Dict-Typs

Obwohl dies weniger empfehlenswert ist, können Sie einen Dict-Typ verwenden, um die JSON-Nutzlast als Schlüssel zu empfangen. Wertepaar:

from typing import Dict, Any

@app.post("/")
def main(payload: Dict[Any, Any]):
    return payload
Nach dem Login kopieren

Option 4: Anforderungstext direkt verwenden

Wenn ja Stellen Sie sicher, dass die eingehenden Daten gültiges JSON sind. Sie können das Request-Objekt von Starlette verwenden, um sie zu analysieren:

from fastapi import Request

@app.post("/")
async def main(request: Request):
    return await request.json()
Nach dem Login kopieren

Testen der Optionen

Sie können diese Optionen testen mit:

Python fordert Bibliothek an:

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 Fetch API:

fetch('/', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({'user': 'foo'})
})
.then(resp => resp.json()) // or, resp.text(), etc
.then(data => {
  console.log(data); // handle response data
})
.catch(error => {
  console.error(error);
});
Nach dem Login kopieren

Durch die Implementierung eines dieser Ansätze können Sie den 422-Fehler beheben und JSON-Daten in Ihren FastAPI POST-Endpunkten erfolgreich verarbeiten.

Das obige ist der detaillierte Inhalt vonWie gehe ich mit dem 422-Fehler von FastAPI beim Empfang von JSON-POST-Anfragen 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