ホームページ > バックエンド開発 > Python チュートリアル > FastAPI POST リクエスト エラー 422: JSON データを適切に処理するにはどうすればよいですか?

FastAPI POST リクエスト エラー 422: JSON データを適切に処理するにはどうすればよいですか?

Patricia Arquette
リリース: 2025-01-03 01:19:38
オリジナル
175 人が閲覧しました

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

FastAPI: POST リクエスト経由で JSON データを送信する際のエラー 422 の理解と解決

問題の説明

を構築するFastAPI を使用した API では、POST リクエストを通じて JSON データを送信するときに、アプリケーションでエラー コード 422 (処理できないエンティティ) が表示されます。一方、GET リクエストはスムーズに動作します。この問題は、JSON の解析、UTF-8 エンコードの使用、または HTTP ヘッダーの変更を試みても解決しません。

gt;詳細な説明

422 ステータス コードを含む応答は、次のことを示しています。送信されたデータのエラー。多くの場合、要素の欠落または誤ったフォーマットが原因です。この場合、問題は POST リクエストの予期される形式に起因しています。デフォルトでは、FastAPI はユーザー入力を JSON ペイロードとしてではなくクエリ パラメーターとして想定します。その結果、クライアントが JSON データを送信しようとすると 422 エラーが発生します。

ソリューション オプション

次の 4 つのオプションは、エンドポイントを正しく定義するための個別のアプローチを提供します。 POST リクエストからの JSON データを処理します:

1。 Pydantic モデルの使用

Pydantic モデルを使用すると、エンドポイントに想定されるデータ構造を指定できます。

from pydantic import BaseModel

class User(BaseModel):
    user: str

@app.post('/')
def main(user: User):
    return user
ログイン後にコピー

2. Body パラメータの使用 Embed

このメソッドは、特別な「embed」パラメータを利用して、ボディを単一のパラメータとして扱います。

from fastapi import Body

@app.post('/')
def main(user: str = Body(..., embed=True)):
    return {'user': user}
ログイン後にコピー

3.辞書型の使用 (あまり推奨されません)

あまり推奨されませんが、このアプローチはキーと値のペアを辞書型として定義します。

from typing import Dict, Any

@app.post('/')
def main(payload: Dict[Any, Any]): 
    return payload
ログイン後にコピー

4 。 Request オブジェクトを直接使用する

このオプションには、Request オブジェクトを使用して受信した JSON データを解析することが含まれます。

from fastapi import Request

@app.post('/')
async def main(request: Request): 
    return await request.json()
ログイン後にコピー

ソリューションのテスト

提供されたソリューションをテストするには、指定された手順に従ってください手順:

Python リクエスト ライブラリの使用
import requests

url = 'http://127.0.0.1:8000/'
payload ={'user': 'foo'}
resp = requests.post(url=url, json=payload)
print(resp.json())
ログイン後にコピー

JavaScript フェッチ API の使用
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);
    });
ログイン後にコピー

以上がFastAPI POST リクエスト エラー 422: JSON データを適切に処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート