Heim >Backend-Entwicklung >Python-Tutorial >Wie behebt man „422 Unprocessable Entity'-Fehler beim Senden von JSON-Daten von JavaScript an FastAPI?

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

DDD
DDDOriginal
2024-11-13 01:06:02577Durchsuche

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

In Ihrem Endpunkt-Handler:

@app.post('/ethAddress')
def add_eth_addr(item: Item):
    return item

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

{
    "eth_addr": "some addr"
}

In Ihrer JavaScript-Abrufanforderung:

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

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}

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

"some addr"

In JavaScript:

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

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}

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

{
    "eth_addr": "some addr"
}

In JavaScript:

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

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!

Stellungnahme:
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