如何将空值传递给swagger中的查询参数?

时间:2016-07-15 18:10:52

标签: swagger swagger-ui

我正在尝试访问类似于http://example.com/service1?q1=a&q2=b的网址。但是,q1有时不会有任何与之关联的值,但需要访问该服务(http://example.com/service1?q1=&q2=b)。我如何通过swagger ui JSON实现这一目标。我尝试过使用allowEmptyValue选项,但它似乎无法正常工作。

请在下面找到我尝试使用allowEmptyValue选项的示例JSON,

{
    "path": "/service1.do",
    "operations": [{
        "method": "GET",
        "type": "void",
        "parameters": [{
                "name": "q1",
                "in" : "query",
                "required": false,
                "type": "string",
                "paramType": "query",
                "allowEmptyValue": true
            },{
                "name": "q2",
                "in" : "query",
                "required": true,
                "type": "string",
                "paramType": "query",
            }


        ],
        "responseMessages": [{
            "code": 200,
            "responseModel": "/successResponseModel"
        }
}

当空值传递给q1时,swagger将URL构建为http://example.com/service1?q2=b。无论如何要包含q1,其中包含空值以包含在URL(http://example.com/service1?q1=&q2=b)中?

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

看起来你的问题是一个尚未解决的swagger-ui的已知问题。 see

作为一种解决方法,您可以执行以下操作之一。

选项1:指定默认值。

此选项与swagger-ui无关。在你的ws实现中,你必须添加一个默认值(在你的情况下为“”),以便在没有添加'q1'时使用。任何REST框架都有此选项。

作为ws-implementation透视图,存在于您的ws中,除非您在未添加“q1”时触发其他服务。 (在大多数情况下可能不是一个好的设计)你可以使用它作为永久的解决方案,而不是暂时的。

选项2:使用枚举(不是一致的解决方案)

正如this中所解释的那样。您可以为swagger定义指定查询参数'q1',如下所示。

{
                 "in": "query",
                 "name": "q1",
                 "type": "boolean",
                 "required": false,
                 "enum" : [true],
                 "allowEmptyValue" : true
}
  

(1)“必需”必须是假的。

     

(2)“allowEmptyValue”必须为true。

     

(3)“enum”必须只有一个非空值。

     

(4)“type”必须是“boolean”。 (或带有特殊枚举的“字符串”,例如“INCLUDE”)

答案 1 :(得分:0)

我设法通过设置解决此问题:

"required": true,
"allowEmptyValue": true

在Swagger-UI中,将显示一个复选框,您可以在其中发送空值。那对我有用。如果已检查并传递了一个空的查询参数,则URL看起来像这样:https://example.com