Rumah >pembangunan bahagian belakang >Tutorial Python >Ralat Permintaan FastAPI POST 422: Bagaimana Mengendalikan Data JSON Dengan Betul?

Ralat Permintaan FastAPI POST 422: Bagaimana Mengendalikan Data JSON Dengan Betul?

Patricia Arquette
Patricia Arquetteasal
2025-01-03 01:19:38179semak imbas

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

FastAPI: Memahami dan Menyelesaikan Ralat 422 apabila Menghantar Data JSON melalui Permintaan POST

Penerangan Masalah

Membina API dengan FastAPI, aplikasi mempamerkan kod ralat 422 (Entiti Tidak Boleh Diproses) semasa menghantar data JSON melalui permintaan POST. GET permintaan, sebaliknya, berfungsi dengan lancar. Isu ini berterusan walaupun terdapat percubaan untuk menghuraikan JSON, menggunakan pengekodan UTF-8 atau mengubah suai pengepala HTTP.

Penjelasan Terperinci

Jawapan dengan kod status 422 menunjukkan ralat dengan data yang diserahkan, selalunya disebabkan unsur yang hilang atau tidak diformatkan dengan betul. Dalam kes ini, masalah berpunca daripada format permintaan POST yang dijangkakan. Secara lalai, FastAPI menjangka input pengguna sebagai parameter pertanyaan, bukan sebagai muatan JSON. Akibatnya, percubaan pelanggan untuk menghantar data JSON mengakibatkan ralat 422.

Pilihan Penyelesaian

Empat pilihan berikut menawarkan pendekatan yang berbeza untuk menentukan titik akhir yang betul memproses data JSON daripada POST permintaan:

1. Menggunakan Model Pydantic

Menggunakan model Pydantic membolehkan anda menentukan struktur data yang dijangkakan untuk titik akhir anda.

from pydantic import BaseModel

class User(BaseModel):
    user: str

@app.post('/')
def main(user: User):
    return user

2. Menggunakan Benam Parameter Badan

Kaedah ini menggunakan parameter "benam" khas untuk merawat badan sebagai parameter tunggal.

from fastapi import Body

@app.post('/')
def main(user: str = Body(..., embed=True)):
    return {'user': user}

3. Menggunakan Jenis Dict (Kurang Disyorkan)

Walaupun kurang disyorkan, pendekatan ini mentakrifkan pasangan nilai kunci sebagai jenis Dict.

from typing import Dict, Any

@app.post('/')
def main(payload: Dict[Any, Any]): 
    return payload

4 . Secara Terus Menggunakan Objek Permintaan

Pilihan ini melibatkan penggunaan objek Permintaan untuk menghuraikan data JSON yang diterima.

from fastapi import Request

@app.post('/')
async def main(request: Request): 
    return await request.json()

Menguji Penyelesaian

Untuk menguji penyelesaian yang disediakan, ikuti yang diberikan langkah:

Menggunakan Perpustakaan Permintaan Python

import requests

url = 'http://127.0.0.1:8000/'
payload ={'user': 'foo'}
resp = requests.post(url=url, json=payload)
print(resp.json())

Menggunakan 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);
    });

Atas ialah kandungan terperinci Ralat Permintaan FastAPI POST 422: Bagaimana Mengendalikan Data JSON Dengan Betul?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn