无法获取如何在数组参数中使用字符串类型的引用和枚举值。 我可以在items键中进行引用并且它正在工作,但Swagger产生错误:不是有效的参数定义
Web UI生成界面,但它有textarea而不是我预期的多选框。
这样做的正确方法是什么?
我的代码:
swagger: '2.0':
paths:
/test:
get:
parameters:
- in: origin
name: status
description: Origin
required: false
schema:
type: array
items:
$ref: '#/definitions/Origin'
collectionFormat: pipes'
definitions:
Origin:
type: string
description: Campaign origin
enum:
- one
- two
externalDocs:
description: Find out more about Swagger
url: http://swagger.io
host: virtserver.swaggerhub.com
basePath: /
答案 0 :(得分:1)
包含items
的{{1}}的数组参数在OpenAPI / Swagger 2.0中为not supported。但它在下一个版本3.0中看起来像this will be possible。目前有几种解决方法,见下文。
您的规范还有其他一些问题:
$ref
无效。 in
关键字指定参数位置(路径,查询,标题等),并且仅根据OpenAPI / Swagger规范接受某些值。我猜您的意思是in: origin
或in: query
。
错别字(或复制粘贴错误?):in: header
在结尾处有一个额外的swagger: '2.0':
,:
在结尾处有一个额外的collectionFormat: pipes'
。
使用包含枚举值的数组参数的一种解决方案是定义内联枚举:
'
另一个解决方案(找到here)是使用YAML锚来引用枚举。这是YAML的一项功能,您可以使用 parameters:
- in: query
name: status
description: Origin
required: false
type: array
collectionFormat: pipes
items:
type: string
enum:
- one
- two
标记密钥,然后再使用&anchor-name
来引用该密钥的值。
*anchor-name
答案 1 :(得分:0)
一个选择是定义一个参数并对其进行引用:(我在查询定义中使用引用($ ref :)遇到问题)
paths:
/path:
get:
operationId: controllers.controller
parameters:
**- $ref: '#/parameters/SPEC'**
parameters:
SPEC: