pythoncurlfastapihttp-status-code-422

FastAPI post does not recognize my parameter


I am usually using Tornado, and trying to migrate to FastAPI.

Let's say, I have a very basic API as follows:

@app.post("/add_data")
async def add_data(data):
    return data

When I am running the following Curl request: curl http://127.0.0.1:8000/add_data -d 'data=Hello'

I am getting the following error:

{"detail":[{"loc":["query","data"],"msg":"field required","type":"value_error.missing"}]}

So I am sure I am missing something very basic, but I do not know what that might be.


Solution

  • Since you are sending a string data, you have to specify that in the router function with typing as

    from pydantic import BaseModel
    
    
    class Payload(BaseModel):
        data: str = ""
    
    
    @app.post("/add_data")
    async def add_data(payload: Payload = None):
        return payload

    Example cURL request will be in the form,

    curl -X POST "http://0.0.0.0:6022/add_data"  -d '{"data":"Hello"}'