> 백엔드 개발 > 파이썬 튜토리얼 > 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 헤더를 수정하려는 시도에도 불구하고 지속됩니다.

자세한 설명

422 상태 코드가 포함된 응답은 다음을 나타냅니다. 제출된 데이터에 오류가 발생하는 경우가 종종 있으며 요소가 누락되거나 형식이 잘못 지정되어 발생하는 경우가 많습니다. 이 경우 문제는 POST 요청의 예상 형식에서 비롯됩니다. 기본적으로 FastAPI는 사용자 입력을 JSON 페이로드가 아닌 쿼리 매개변수로 예상합니다. 결과적으로 클라이언트가 JSON 데이터를 전송하려고 시도하면 422 오류가 발생합니다.

솔루션 옵션

다음 네 가지 옵션은 엔드포인트를 올바르게 정의하기 위한 고유한 접근 방식을 제공합니다. 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. Dict 유형 사용(덜 권장됨)

덜 권장되지만 이 접근 방식은 키-값 쌍을 Dict 유형으로 정의합니다.

from typing import Dict, Any

@app.post('/')
def main(payload: Dict[Any, Any]): 
    return payload
로그인 후 복사

4 . 요청 개체를 직접 사용

이 옵션에는 요청 개체를 사용하여 수신된 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 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);
    });
로그인 후 복사

위 내용은 FastAPI POST 요청 오류 422: JSON 데이터를 올바르게 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿