I would like to POST a json body with Swagger, like this :
curl -H "Content-Type: application/json" -X POST -d {"username":"foobar","password":"xxxxxxxxxxxxxxxxx", "email": "[email protected]"}' http://localhost/user/register
Currently, I have this definition :
"/auth/register": { "post": { "tags": [ "auth" ], "summary": "Create a new user account", "parameters": [ { "name": "username", "in": "query", "description": "The username of the user", "required": true, "type": "string" }, { "name": "password", "in": "query", "description": "The password of the user", "required": true, "type": "string", "format": "password" }, { "name": "email", "in": "query", "description": "The email of the user", "required": true, "type": "string", "format": "email" } ], "responses": { "201": { "description": "The user account has been created", "schema": { "$ref": "#/definitions/User" } }, "default": { "description": "Unexpected error", "schema": { "$ref": "#/definitions/Errors" } } } } }
But the data are sent in the URL. Here the generated curl provided by Swagger :
curl -X POST --header 'Content-Type: application/json' --header 'Accept: application/json' 'http://localhost/user/register?username=foobar&password=password&email=foo%40bar.com'
I understand that the query
keywork is not good, but I didn't find the way to POST a JSON body. I tried formData
but it didn't work.
The format of an HTTP POST is to have the HTTP headers, followed by a blank line, followed by the request body. The POST variables are stored as key-value pairs in the body. You can see this using a tool like Fiddler, which you can use to watch the raw HTTP request and response payloads being sent across the wire.
Yes it is expected to have Body/Content in body, but it is not required(Mandatory). Save this answer.
You need to use the body
parameter:
"parameters": [ { "in": "body", "name": "body", "description": "Pet object that needs to be added to the store", "required": false, "schema": { "$ref": "#/definitions/Pet" } } ],
and #/definitions/Pet
is defined as a model:
"Pet": { "required": [ "name", "photoUrls" ], "properties": { "id": { "type": "integer", "format": "int64" }, "category": { "$ref": "#/definitions/Category" }, "name": { "type": "string", "example": "doggie" }, "photoUrls": { "type": "array", "xml": { "name": "photoUrl", "wrapped": true }, "items": { "type": "string" } }, "tags": { "type": "array", "xml": { "name": "tag", "wrapped": true }, "items": { "$ref": "#/definitions/Tag" } }, "status": { "type": "string", "description": "pet status in the store", "enum": [ "available", "pending", "sold" ] } }, "xml": { "name": "Pet" } },
Ref: https://github.com/OpenAPITools/openapi-generator/blob/master/modules/openapi-generator/src/test/resources/2_0/petstore.json#L35-L43
OpenAPI/Swagger v2 spec: https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#parameter-object
For OpenAPI v3 spec, body
parameter has been deprecated. To define the HTTP payload, one needs to use the requestBody
instead, e.g. https://github.com/OpenAPITools/openapi-generator/blob/master/modules/openapi-generator/src/test/resources/3_0/petstore.json#L39-L41
OpenAPI v3 spec: https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#requestBodyObject
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With