Home >Backend Development >Python Tutorial >FastAPI POST Request Error 422: How to Properly Handle JSON Data?
Building an API with FastAPI, the application exhibits error code 422 (Unprocessable Entity) while sending JSON data through a POST request. GET requests, on the other hand, work smoothly. This issue persists despite attempts to parse JSON, use UTF-8 encoding, or modify HTTP headers.
A response with the 422 status code indicates an error with the submitted data, often due to missing or incorrectly formatted elements. In this case, the problem stems from the expected format of the POST request. By default, FastAPI anticipates user input as a query parameter, not as JSON payload. Consequently, the client's attempt to transmit JSON data results in the 422 error.
The following four options offer distinct approaches to defining an endpoint that correctly processes JSON data from a POST request:
Employing Pydantic models enables you to specify an expected data structure for your endpoint.
from pydantic import BaseModel class User(BaseModel): user: str @app.post('/') def main(user: User): return user
This method utilizes the special "embed" parameter to treat the body as a single parameter.
from fastapi import Body @app.post('/') def main(user: str = Body(..., embed=True)): return {'user': user}
While less recommended, this approach defines a key-value pair as a Dict type.
from typing import Dict, Any @app.post('/') def main(payload: Dict[Any, Any]): return payload
This option involves using the Request object to parse the received JSON data.
from fastapi import Request @app.post('/') async def main(request: Request): return await request.json()
To test the provided solutions, follow the given steps:
import requests url = 'http://127.0.0.1:8000/' payload ={'user': 'foo'} resp = requests.post(url=url, json=payload) print(resp.json())
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); });
The above is the detailed content of FastAPI POST Request Error 422: How to Properly Handle JSON Data?. For more information, please follow other related articles on the PHP Chinese website!