当前位置: 首页 > 知识库问答 >
问题:

Swagger中的多态性在鉴别器上产生奇怪的错误消息

艾焕
2023-03-14

我正在编写一个服务,它的GET可以返回五种不同但密切相关的类型中的一种。因为用户希望能够一次搜索所有五种类型,所以只能进行一次get调用。我返回的是JSON,可以轻松处理任何类型。

我正试图在斯威格中这样做,使用他们的多态性特性,这是我以前从未尝试过的。我的做法与示例中的一样,只是在“定义”下,而不是在“组件/模式”下。但我收到了一条奇怪的错误信息,我无法理解。下面是swagger文件。错误是这样的:

定义['Event']处的架构错误。鉴别器应该是字符串

它在第49行给出了这个信息,上面写着< code>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.)

共有1个答案

蔚和风
2023-03-14
discriminator:
  propertyName: eventType

在 OpenAPI 2.0 中,鉴别器的值是属性名称:

discriminator: eventType

此外,OpenAPI 2.0假设鉴别器属性(在本例中为< code>eventType)的可能值与< code>definitions中的模型名称完全相同。那就是:

    查看问题,了解 OpenAPI 2.0 中鉴别器用法的更多示例:

    • 摇摆不定的继承和组成
    • 多态性中的“鉴别器”,OpenAPI 2.0(Swagger 2.0)
    • 摇摆:取决于字段值的变体架构形状
     类似资料:
    • 引用OpenAPI 2.0模式对象或Swagger 2.0模式对象,并将字段定义为: 增加了对多态性的支持。鉴别器是用于区分继承此架构的其他架构的架构属性名称。使用的属性名称必须在此架构中定义,并且必须位于属性列表中。使用时,该值必须是此架构或继承它的任何架构的名称。 我的困惑/问题: 对我来说,它究竟在继承或多态性中扮演什么角色是不明确的。能不能请一些人用一个工作示例来解释,说明它到底是做什么的

    • 所以我在做这个素数家庭作业,举了一个很好的例子,我想我已经把大部分都记下来了。我遇到的一件事是“公共静态空隙筛(int n)”一行的错误,这也发生在“私有静态int twinPrime()”中 代码如下: 以下是错误: void是变量筛的无效类型 预期令牌 "(", ; 语法错误 令牌 “)” 上的语法错误, ;预期 和 标记“int”语法错误,应为@ 语法错误,请插入“EnumBody”以完成B

    • 问题内容: 我正在使用此代码: 但是在编译时出现此错误: 然后是堆栈跟踪的编译器错误。 我将在课堂开始时同时进行这两种导入: 有什么事吗 在Netbeans中,我看到自动完成选项并且Locale对象没有语法错误… 问题答案: 您的设置有些麻烦,下面的程序对我来说很好用。 它要求源代码的事实使我相信它正在尝试以某种调试模式进行编译或运行。您不需要编译java.util。*的源代码,这很奇怪。 看看我

    • 我有这个方法: TableField很简单,就像: 但我看到了这个编译错误: 不兼容的类型。必需的集合,但已将“映射”推断为流:不存在类型为变量R的实例,因此流符合集合

    • 我有一个与鉴别器列连接的继承映射。 父实体: 附注。我使用的是hibernate 5.0.9.Final。

    • 问题内容: 是否可以强制休眠将歧视符列用于继承的继承类型?根据JPA2.0规范,这应该可行,但是我无法在休眠状态下实现。 例: 使用hibernate.hbm2ddl.auto create时,这甚至都不会在表PARENT中创建列TYPE。 我知道InheritanceType.JOINED可以在不定义鉴别符列的情况下工作,但是它是非常无效的,因为在使用鉴别符列中的信息时,休眠需要在父对象和所有子