我正在尝试访问类似于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)中?
非常感谢任何帮助。
答案 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?