30

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.

1 Answer 1

54

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

Sign up to request clarification or add additional context in comments.

2 Comments

How can I post "requestBody" using jquery ajax call or fetch?? I'm trying but swagger api receive params always empty
Please try openapi-generator to generate typescript-jquery, typescript-fetch clients and see if that's what you want.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.