概要
JavaScript フロントエンドから FastAPI に JSON データを転送しようとする場合POST リクエストを使用する FastAPI バックエンドでは、「422 Unprocessable Entity」のようなエラー メッセージが表示される場合があります。この記事では、この問題が発生する理由を検討し、問題を解決するための解決策を示します。
エラー分析
このエラーは、バックエンド FastAPI エンドポイントがクエリ パラメータではなくクエリ パラメータを予期していることを示しています。 JSON本体。デフォルトでは、FastAPI エンドポイントの非パス パラメーターはクエリ パラメーターとして解釈されます。
解決策
この問題に対処し、JSON データの投稿を有効にする方法は複数あります。 :
JSON データを表す Pydantic モデルを作成します。例:
from pydantic import BaseModel class Item(BaseModel): eth_addr: str
エンドポイント ハンドラー内:
@app.post('/ethAddress') def add_eth_addr(item: Item): return item
これには、JSON 本文が次の形式である必要があります:
{ "eth_addr": "some addr" }
JavaScript フェッチ リクエスト内:
//... headers: { 'Accept': 'application/json', 'Content-Type': 'application/json' }, body: JSON.stringify({ "eth_addr": "some addr" }), //...
from fastapi import Body @app.post('/ethAddress') def add_eth_addr(eth_addr: str = Body()): return {'eth_addr': eth_addr}
これにより、JSON データを文字列として直接投稿できます:
"some addr"
JavaScript の場合:
//... headers: { 'Accept': 'application/json', 'Content-Type': 'application/json' }, body: JSON.stringify("some addr"), //...
from fastapi import Body @app.post('/ethAddress') def add_eth_addr(eth_addr: str = Body(embed=True)): return {'eth_addr': eth_addr}
これは、オプション 2 と同じ形式の JSON ボディを想定しています:
{ "eth_addr": "some addr" }
JavaScript の場合:
//... headers: { 'Accept': 'application/json', 'Content-Type': 'application/json' }, body: JSON.stringify({ "eth_addr": "some addr" }), //...
結論
これらの解決策に従うことで、JavaScript フロントエンドから FastAPI エンドポイントに JSON データを正常に投稿できます。特定の要件に最も適したアプローチを選択することを忘れないでください。
以上がJSON データを JavaScript から FastAPI に送信するときに発生する「422 Unprocessable Entity」エラーを修正する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。