加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 告诉Swagger请求体可以是单个对象或对象列表

发布时间:2020-12-16 09:00:35 所属栏目:安全 来源:网络整理
导读:我使用Swagger和 Scala来记录我的REST API.我想为POST,PUT和DELETE启用批量操作,并希望相同的路由接受单个对象或对象集合作为正文内容. 有没有办法告诉Swagger param是A类型的值列表还是A类型的单个值? 像REST的varargs之类的东西. 解决方法 Is there a way
我使用Swagger和 Scala来记录我的REST API.我想为POST,PUT和DELETE启用批量操作,并希望相同的路由接受单个对象或对象集合作为正文内容.

有没有办法告诉Swagger param是A类型的值列表还是A类型的单个值?

像REST的varargs之类的东西.

解决方法

Is there a way to tell Swagger that a param is either a list of values of type A or a single value of type A?

这取决于您使用的是OpenAPI 3.0还是OpenAPI(Swagger)2.0.

OpenAPI使用JSON Schema的扩展子集来描述主体有效负载. JSON Schema提供oneOf和anyOf关键字来定义实例的多个可能模式.但是,不同版本的OpenAPI支持不同的JSON Schema关键字集.

OpenAPI 3.0支持oneOf和anyOf,因此您可以按如下方式描述这样的对象或对象数组:

openapi: 3.0.0
...

components:
  schemas:
    A:
      type: object
    Body:
      oneOf:
        - $ref: '#/components/schemas/A'
        - type: array
          items:
            $ref: '#/components/schemas/A'

在上面的示例中,Body可以是对象A或对象A的数组.

OpenAPI(Swagger)2.0 does not support oneOf and anyOf.你能做的最多就是使用typeless schema:

swagger: '2.0'
...

definitions:
  A:
    type: object
  # Note that Body does not have a "type"
  Body:
    description: Can be object `A` or an array of `A`

这意味着Body可以是任何东西 – 一个对象(任何对象!),一个数组(包含任何项目!),也是一个原语(字符串,数字等).在这种情况下,无法定义确切的Body结构.您只能在说明中口头描述.

您需要使用OpenAPI 3.0来定义您的确切方案.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读