Search code examples
reactjsaxios

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?


Solution

  • 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.