C A OB1
C A OB1

Reputation: 127

Axios put request - 422 error unprocessable entity

Front end:

await axios.put('/api/updategardensize', { gardenSize :'haha'} ,{withCredentials: true})

Backend API ENDPOINT IS:

@app.put("/api/updategardensize", status_code=status.HTTP_200_OK)
async def updatefeaturegarden(request: Request , gardenSize: str):

422 Unprocessable Entity- I've tried every combination. Can anyone figure this one out?

Upvotes: 1

Views: 16

Answers (1)

Shashika Silva
Shashika Silva

Reputation: 228

FastAPI expects request bodies to be structured using Pydantic models. Instead of passing gardenSize: str directly as a function parameter, define a Pydantic model:

from fastapi import FastAPI, Request, Depends
from pydantic import BaseModel
from starlette import status

app = FastAPI()

class GardenSizeUpdate(BaseModel):
    gardenSize: str

@app.put("/api/updategardensize", status_code=status.HTTP_200_OK)
async def updatefeaturegarden(data: GardenSizeUpdate):
    return {"message": f"Garden size updated to {data.gardenSize}"}

If you don't want to use Pydantic, you can manually parse the request body:

@app.put("/api/updategardensize", status_code=status.HTTP_200_OK)
async def updatefeaturegarden(request: Request):
    body = await request.json()
    garden_size = body.get("gardenSize")
    return {"message": f"Garden size updated to {garden_size}"}

However, the Pydantic model approach is the best practice since it enforces type validation automatically.

Upvotes: 2

Related Questions