Solución:
Los parámetros de consulta de formato libre se pueden describir utilizando OpenAPI 3.0, pero no OpenAPI 2.0 (Swagger 2.0). El parámetro debe tener type: object
con el método de serialización style: form
y explode: true
. El objeto se serializará como ?prop1=value1&prop2=value2&...
, donde individual prop = valor los pares son las propiedades del objeto.
openapi: 3.0.1
...
paths:
/users:
get:
parameters:
- in: query
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
Los parámetros de consulta de forma libre son compatibles con Swagger UI 3.15.0+ y Swagger Editor 3.5.6+. En el editor de parámetros, ingrese los nombres y valores de los parámetros en el formato de objeto JSON, p. Ej. { "prop1": "value1", "prop2": "value2" }
. “Pruébelo” los enviará como param=value
parámetros de consulta:
Sin embargo, no estoy seguro del soporte de Codegen.
La respuesta de @ Helen funciona perfectamente incluso con Spring usando la biblioteca springdoc-openapi-ui.
Dependencia:
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-ui</artifactId>
<version>1.1.43</version>
</dependency>
En la función API, agregue el siguiente parámetro:
@Parameter(in=ParameterIn.QUERY,
name="params", style=ParameterStyle.FORM,
[email protected](type="object"), explode=Explode.TRUE,
example="") String paramsObj