Wie behebt man „422 Unprocessable Entity'-Fehler beim Senden von JSON-Daten von JavaScript an FastAPI?

DDD
Freigeben: 2024-11-13 01:06:02
Original
466 Leute haben es durchsucht

How to Fix

Fehlerbehebung bei JSON-Post-Anfragen von JavaScript an FastAPI

Einführung

Beim Versuch, JSON-Daten von einem JavaScript-Frontend an zu übertragen Wenn Sie ein FastAPI-Backend mit einer POST-Anfrage verwenden, werden möglicherweise Fehlermeldungen wie „422 Unprocessable Entity“ angezeigt. In diesem Artikel wird untersucht, warum dies auftritt, und Lösungen zur Behebung des Problems bereitgestellt.

Fehleranalyse

Der Fehler weist darauf hin, dass Ihr Backend-FastAPI-Endpunkt einen Abfrageparameter erwartet, keinen JSON-Körper. Standardmäßig werden Nicht-Pfad-Parameter in FastAPI-Endpunkten als Abfrageparameter interpretiert.

Lösung

Es gibt mehrere Methoden, um dieses Problem zu beheben und die Veröffentlichung von JSON-Daten zu ermöglichen :

Option 1: Definieren Sie ein Pydantic-Modell

Erstellen Sie ein Pydantic-Modell zur Darstellung der JSON-Daten, zum Beispiel:

from pydantic import BaseModel

class Item(BaseModel):
    eth_addr: str
Nach dem Login kopieren

In Ihrem Endpunkt-Handler:

@app.post('/ethAddress')
def add_eth_addr(item: Item):
    return item
Nach dem Login kopieren

Dafür muss der JSON-Body das folgende Format haben:

{
    "eth_addr": "some addr"
}
Nach dem Login kopieren
Nach dem Login kopieren

In Ihrer JavaScript-Abrufanforderung:

//...
headers: {
    'Accept': 'application/json',
    'Content-Type': 'application/json'
},
body: JSON.stringify({
    "eth_addr": "some addr"
}),
//...
Nach dem Login kopieren
Nach dem Login kopieren

Option 2: Verwenden Sie FastAPI Body() Typ

from fastapi import Body

@app.post('/ethAddress')
def add_eth_addr(eth_addr: str = Body()):
    return {'eth_addr': eth_addr}
Nach dem Login kopieren

Dies ermöglicht das direkte Posten der JSON-Daten als Zeichenfolge:

"some addr"
Nach dem Login kopieren

In JavaScript:

//...
headers: {
    'Accept': 'application/json',
    'Content-Type': 'application/json'
},
body: JSON.stringify("some addr"),
//...
Nach dem Login kopieren

Option 3: Verwenden Sie die Einbettungsfunktion von FastAPI (Empfohlen für Einzelkörperparameter)

from fastapi import Body

@app.post('/ethAddress')
def add_eth_addr(eth_addr: str = Body(embed=True)):
    return {'eth_addr': eth_addr}
Nach dem Login kopieren

Dies erfordert den JSON-Körper im gleichen Format wie Option 2:

{
    "eth_addr": "some addr"
}
Nach dem Login kopieren
Nach dem Login kopieren

In JavaScript:

//...
headers: {
    'Accept': 'application/json',
    'Content-Type': 'application/json'
},
body: JSON.stringify({
    "eth_addr": "some addr"
}),
//...
Nach dem Login kopieren
Nach dem Login kopieren

Fazit

Wenn Sie diese Lösungen befolgen, können Sie JSON-Daten erfolgreich von Ihrem JavaScript-Frontend an Ihren FastAPI-Endpunkt senden. Denken Sie daran, den Ansatz zu wählen, der Ihren spezifischen Anforderungen am besten entspricht.

Das obige ist der detaillierte Inhalt vonWie behebt man „422 Unprocessable Entity'-Fehler beim Senden von JSON-Daten von JavaScript an FastAPI?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage