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

OpenAPI / Swagger 3.0: 默认鉴别器值

耿学义
2023-03-14

如何为每个子类设置默认鉴别器?

例如,采用以下架构:

components:
  schemas:
    Pet:
      type: object
      required:
      - petType
      properties:
        petType:
          type: string
      discriminator:
        propertyName: petType
    Cat:
      allOf:
      - $ref: '#/components/schemas/Pet'
      - type: object
        # all other properties specific to a `Cat`
        properties:
          name:
            type: string
    Dog:
      allOf:
      - $ref: '#/components/schemas/Pet'
      - type: object
        # all other properties specific to a `Dog`
        properties:
          bark:
            type: string

上述架构的代码生成器将创建一个客户端,其中 petType 值必须由程序员显式设置。为什么默认情况下不能将 Cat 对象将 petType 设置为“猫”

我尝试使用默认值来使其正常工作。但是,生成的代码包括阴影属性(子属性和父属性相同)。

components:
  schemas:
    Pet:
      type: object
      required:
      - petType
      properties:
        petType:
          type: string
      discriminator:
        propertyName: petType
    Cat:
      allOf:
      - $ref: '#/components/schemas/Pet'
      - type: object
        # all other properties specific to a `Cat`
        properties:
          name:
            type: string
          petType:
            type: string
            default: 'Cat'
    Dog:
      allOf:
      - $ref: '#/components/schemas/Pet'
      - type: object
        # all other properties specific to a `Dog`
        properties:
          bark:
            type: string
          petType:
            type: string
            default: 'Dog'

从父对象中删除属性< code>petType也不太合适,因为从技术上讲,它更像是父对象的属性,而不是子对象的属性。

components:
  schemas:
    Pet:
      type: object
      required:
      - petType
      discriminator:
        propertyName: petType
    Cat:
      allOf:
      - $ref: '#/components/schemas/Pet'
      - type: object
        # all other properties specific to a `Cat`
        properties:
          name:
            type: string
          petType:
            type: string
            default: 'Cat'
    Dog:
      allOf:
      - $ref: '#/components/schemas/Pet'
      - type: object
        # all other properties specific to a `Dog`
        properties:
          bark:
            type: string
          petType:
            type: string
            default: 'Dog'

你对这个问题有什么解决办法吗?

共有1个答案

裴承安
2023-03-14

一旦指定了映射,默认值就可能是隐式????

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

  • 我正在使用Swagger 3.0/OpenAPI编写一个网站来描述我的API和Node。js用于后端。我成功地完成了GET请求,但我在处理所有POST请求时遇到了一些问题。问题是,我在执行POST请求时从HTML表单提供的参数似乎没有被/controllers文件夹中Swagger处理程序自动生成的参数接收。尤其是req.招摇。params数组和req.swagger。params['body']

  • Discriminator 是一种 schema 继承机制。 他允许你在相同的底层 MongoDB collection 上 使用部分重叠的 schema 建立多个 model。 假设你要在单个 collection 中记录多种 event, 每个 event 都有时间戳字段,但是 click 事件还有 URL 字段, 这时你可以用 model.discriminator() 实现上述要求。 此函

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

  • 我有一个dto用作rest服务中的请求体: 当我们生成OpenAPI/Swagger yaml时,属性名为“MyProperty” 是否有可能在OpenAPI/Swagger中自动强制使用别名?(注释?创建yaml期间?还有其他吗?)

  • 在@inheritage类型Joined中 我有班级成员、员工和学生 因此,当我保存Employee或Student记录,然后检索Person记录时,它给我的鉴别器列值为NULL,但在重新启动服务器后,它给我相应的值 如果我手动设置鉴别器列值的值,然后保存和检索,那么它会给我这个值(我需要手动设置鉴别器列值吗?)那么使用鉴别器列有什么好处呢 为什么我不应该使用一个具有列类型的employee和st