28

Is there any way to document the following query?

GET api/v1/users?name1=value1&name2=value

where the query parameter names are dynamic and will be received from the client.

I'm using the latest Swagger API.

2 Answers 2

47

Free-form query parameters can be described using OpenAPI 3.x, but not OpenAPI 2.0 (Swagger 2.0). The parameter must have type: object with the serialization method style: form and explode: true. The object will be serialized as ?prop1=value1&prop2=value2&..., where individual prop=value pairs are the object properties.

openapi: 3.0.3
...
paths:
  /users:
    get:
      parameters:
        - in: query

          # Arbitrary name. It won't appear in the request URL, but will be used
          # in server & client code generated from this OAS document.
          name: params

          schema:
            type: object
            # If the parameter values are of specific type, e.g. string:
            additionalProperties:
              type: string
            # If the parameter values can be of different types
            # (e.g. string, number, boolean, ...)
            # additionalProperties: true

          # `style: form` and `explode: true` is the default serialization method
          # for query parameters, so these keywords can be omitted
          style: form
          explode: true

Free-form query parameters are supported in Swagger UI 3.15.0+ and Swagger Editor 3.5.6+. In the parameter editor, enter the parameter names and values in the JSON object format, e.g. { "prop1": "value1", "prop2": "value2" }. "Try it out" will send them as param=value query parameters:

Free-form query parameters in Swagger UI

Not sure about Codegen support though.

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

4 Comments

Thanks! this was what I needed. Also, do you know if there is a way to export API documentation from a Spring Boot application for OpenAPI 3.0 ?
@abisheksampath sorry I'm not familiar with Spring Boot. If you mean Springfox specifically it doesn't seem to support OpenAPI 3.0 yet (as of November 2018).
This doesn't work with codegen. It throws an error Cannot convert undefined or null to object when accessing schema.properties
@MariaInesParnisari send a bug report to the codegen project that you used.
2

@Helen's answer works perfectly even with Spring using the springdoc-openapi-ui library.

Dependency:

 <dependency>
    <groupId>org.springdoc</groupId>
    <artifactId>springdoc-openapi-ui</artifactId>
    <version>1.1.43</version>
 </dependency>

In the API function, add the following parameter:

 @Parameter(in=ParameterIn.QUERY,
            name="params", style=ParameterStyle.FORM,
            schema=@Schema(type="object"), explode=Explode.TRUE,
            example="") String paramsObj

1 Comment

This can not work with a Map. The type is ignored : github.com/springdoc/springdoc-openapi/blob/master/…

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.