ホームページ > バックエンド開発 > Python チュートリアル > JSON データを POST する際の FastAPI の 422 エラーを修正する方法は?

JSON データを POST する際の FastAPI の 422 エラーを修正する方法は?

Patricia Arquette
リリース: 2024-12-17 01:24:24
オリジナル
647 人が閲覧しました

How to Fix FastAPI's 422 Error When POSTing JSON Data?

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

422 Unprocessable Entity エラーは通常、リクエストのペイロードが構文的に正しくない場合に発生します。正しいですが、サーバーの期待と一致しません。この特定のケースでは、リクエストがクエリ パラメーターとしてデータを受信することを想定しているエンドポイントに JSON データを送信しようとしているために、このエラーが発生しています。

この問題を解決するには、複数の方法があります。 🎜> 利用可能:

オプション 1: Pydantic を使用するモデル

  • Pydantic モデルを使用すると、エンドポイントに予期されるデータ構造を指定できます。以下のコード スニペットは、Pydantic モデルとして表される JSON データを受け入れるエンドポイントを定義する方法を示しています。
from pydantic import BaseModel

class User(BaseModel):
    user: str

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

オプション 2: ボディ パラメーターを使用する

  • Pydantic モデルが望ましくない場合は、Body パラメーターを利用できます。 「Body」パラメータの埋め込みを使用すると、関数シグネチャの一部としてリクエスト本文を埋め込むことができます:
from fastapi import Body

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

オプション 3: 辞書タイプを使用する

  • もう 1 つの方法は、あまり推奨されませんが、Dict 型を使用してキーと値のペアを定義することです。ただし、この手法はカスタム検証をサポートしていません:
from typing import Dict, Any

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

オプション 4: リクエスト本文に直接アクセス

  • Starlette のリクエスト オブジェクトでは、直接アクセスできます。 await request.json() を使用して、解析された JSON リクエスト本文にアクセスします。ただし、このアプローチではカスタム検証は提供されず、エンドポイント定義に async def を使用する必要があります:
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 の Fetch 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);
    });
ログイン後にコピー

これらのアプローチのいずれかを選択して実装すると、JSON データを正常に処理できます。 FastAPI エンドポイントで 422 エラーを解決します。

以上がJSON データを POST する際の FastAPI の 422 エラーを修正する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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