我正在编写一个带有 GET 的服务,它可以返回五种不同但密切相关的类型之一。由于用户想要同时搜索所有五种类型的选项,因此它必须是单个 get 调用。我返回 JSON,它可以轻松处理任何类型。
我正在尝试在 Swagger 中使用它们的多态性功能来做到这一点,这是我以前从未尝试过的。我所做的就像在示例中一样,除了在“定义”而不是“组件/模式”下。但我收到一条我无法理解的奇怪错误消息。swagger 文件如下。错误是这样说的:
定义 ['Event'] 处的架构错误。discriminator 应该是字符串
它在第 49 行给出了这个,上面写着discriminator:
所以,我的两个问题是:我该如何解决它?这还能满足我的需要吗?
swagger: '2.0'
info:
description: RESTful API to retrieve Titles Metadata
version: 1.0.0
title: Swagger Mystery
schemes:
- https
paths:
/event:
get:
operationId: getEvent
summary: searches names
description: |
Search by names, across all types, or by a specific type.
produces:
- application/json
parameters:
- in: query
name: title
description: name to search for
required: true
type: string
- in: query
name: start
required: false
type: boolean
- in: query
name: type
required: false
type: string
description: |
May be "contest", "partner", "sponsor", or "dancer". If missing, will search for all types.
responses:
'200':
description: search results
# I also don't know why I need to comment these out.
# content:
# application/json:
# schema:
# type: array
# items:
# $ref: '#/definitions/Event'
'400':
description: bad input parameter
definitions:
Event:
type: object
discriminator:
propertyName: eventType
properties:
eventType:
type: string
id:
type: integer
format: int64
name:
type: string
description:
type: string
contests:
type: array
items:
$ref: '#/definitions/Contest'
required:
- id
- name
- description
- contests
- eventType
Contest:
allOf:
- $ref: '#/definitions/Event'
- type: object
properties:
parentEvent:
type: string
venue:
type: string
required:
- parentEvent
- venue
Dancer:
allOf:
- $ref: '#/definitions/Event'
- type: object
properties:
eventInvitationDate:
type: string
format: date
venue:
type: string
required:
- eventInvitationDate
- venue
# Sponsor:
# allOf:
# - $ref: '#/definitions/Event'
# - type: object
# properties:
# invitationDate:
# type: string
# format: date
# parentEvent:
# type: string
# partners:
# type: array
# items:
# $ref: '#/definitions/Partner'
Partner:
allOf:
- $ref: '#/definitions/Event'
- type: object
properties:
invitationDate:
type: string
format: date
parentEvent:
type: string
venue:
type: string
required:
- invitationDate
- parentEvent
- venue
# two problems:
# 1. Schema error at definitions['Event'].discriminator
# should be string on line 49 (discriminator:)
# 2. Resolver error:
# e is undefined
# (no line number)
# (This error goes away when I comment out Sponsor.)
Run Code Online (Sandbox Code Playgroud)
出现此错误是因为您混合了 OpenAPI 2.0 和 3.0 语法。
\n\n您的规范是swagger: \'2.0\'
但以下是 3.0 语法:
discriminator:\n propertyName: eventType\n
Run Code Online (Sandbox Code Playgroud)\n\n在 OpenAPI 2.0 中, 的值为discriminator
属性名称:
discriminator: eventType\n
Run Code Online (Sandbox Code Playgroud)\n\n此外,OpenAPI 2.0 假设鉴别器属性的可能值(在本例中为eventType
)与 中的模型名称完全相同definitions
。那是:
eventType
可以是event
小写partner
的 等,那么模型名称也必须是小写的 \xe2\x80\x93 event
,而不是Event
。eventType
代码,则型号名称必须是、等,而不是等。e
p
d
e
p
d
Event
Partner
查看问题以获取discriminator
OpenAPI 2.0 中的更多用法示例:
归档时间: |
|
查看次数: |
2378 次 |
最近记录: |