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
Lepaskan: 2025-01-03 01:19:38
asal
136 orang telah melayarinya

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
Salin selepas log masuk

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}
Salin selepas log masuk

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
Salin selepas log masuk

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()
Salin selepas log masuk

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())
Salin selepas log masuk

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);
    });
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan