使用Swagger 2.0我试图指定一个object类型的输入参数:
代码段:
paths:
'/thingies/{thingy_id}.json':
put:
summary: Update an existing thingy
description: Updates an existing thingy
parameters:
- name: thingy_id
description: ID of the thingy to update
in: path
required: true
type: integer
- name: translation
description: Name and Locale for new translation
in: formData
type: object
properties:
name:
type: string
locale:
type: string
然而,验证者抱怨type: object
部分。
我应该如何正确指定输入参数?
答案 0 :(得分:12)
好的,感谢来自@ron的输入我已经找到了解决方案。是的,我需要使用body
代替formData
,但即使这样,它也没有验证,抱怨type: object
。但是如果我首先定义对象然后$ref
那么它就可以了。以下代码确实验证了。
swagger: '2.0'
info:
version: '1'
title: Thingy Service
description: Everyone loves their thingy
schemes:
- http
consumes:
- application/json
produces:
- application/json
definitions:
localisation:
type: object
required:
- name
- locale
properties:
name:
type: string
locale:
type: string
paths:
'/thingies/{thingy_id}.json':
put:
summary: Update an existing thingy
description: Updates an existing thingy
parameters:
- name: thingy_id
description: ID of the thingy to update
in: path
required: true
type: integer
- name: translation
description: Name and Locale for new translation
in: body
schema:
$ref: '#/definitions/localisation'
responses:
204:
description: No data
404:
description: Thingy not found
答案 1 :(得分:9)
Swagger仅允许对象输入作为主体参数。
其原因与内容序列化的方式有关,取决于Content-Type
标题(Swagger中的produces
)。该标题与整个有效载荷有关。
传递表单参数时,您使用以下两种mime类型之一:multipart/form-data
或application/x-www-form-urlencoded
。虽然前者允许您为每个部件指定mime类型,但Swagger目前不支持这样的定义。它上面有一个开放的票据,可以在规范的未来版本中使用它。
目前,在指定表单参数时,您只能指定基元或基元数组。