2016-07-15 261 views
2

我正在尝试访问类似于http://example.com/service1?q1=a&q2=b的网址。然而q1有时没有任何与其相关的值,但是需要访问该服务(http://example.com/service1?q1=&q2=b)。我如何通过swagger ui JSON实现这一目标。我试过使用allowEmptyValue选项,但它似乎并没有工作。如何将空值传递给在swagger中查询参数?

请找到样本JSON我使用allowEmptyValue选项下面试过,

{ 
    "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,招摇帧URL作为http://example.com/service1?q2=b。是否有包含q1的空值将被包含在URL中(http://example.com/service1?q1=&q2=b)?

任何帮助将不胜感激。

+0

@SupunWijerathne我们治疗是一种特殊情况,其中第一季度为空值做了具体的操作 – Anand

+0

所以http://example.com/service1 ?q1 =&q2 = b在没有swagger-ui的情况下直接通话? –

+0

@SupunWijerathne yep .. – Anand

回答

1

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

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

选项1:指定默认值。

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

由于WS-实现的观点,这应该在有你的WS,除非你有其他服务时,“Q1”不添加到被触发。 (在大多数情况下,这可能不是一个好设计)您可以将其作为永久解决方案,而不是临时解决方案。

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

this解释的那样。你可以为你的swagger定义指定你的查询参数'q1'。

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

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

(2)“allowEmptyValue”必须为真。

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

(4)“type”必须是“boolean”。 (或“串”用一种特殊的枚举,说“包含”)

+0

我不可能使用您的选项1,因为我必须更改数百个Web服务,并且您的选项2会阻止用户输入他的输入,因为q1只能取值为enum中提及的一组值。 – Anand

+0

@Anand如果option1可用(如果不影响您的端点规范),那么这是最好的方法,不仅要解决您的招摇问题,还要解决总体实施目标。尽管您必须更改数百个,但如果您高效地使用IDE,它只需要几次点击。 –

+0

不..但我们决定去解决方法:) – Anand