引用OpenAPI 2.0模式对象或Swagger 2.0模式对象,并将鉴别器
字段定义为:
增加了对多态性的支持。鉴别器是用于区分继承此架构的其他架构的架构属性名称。使用的属性名称必须在此架构中定义,并且必须位于必需的
属性列表中。使用时,该值必须是此架构或继承它的任何架构的名称。
我的困惑/问题:
鉴别器
,说明它到底是做什么的,如果我们不使用它该怎么办?在某些操作中,是否存在任何错误、警告或任何依赖于它的工具
到目前为止,我已经尝试过:
Dog
模型扩展到更深一层,并在新的子模型上尝试了相同的操作,但在swagger editor的预览中没有看到任何更改
我用来做实验的示例代码:
definitions:
Pet:
type: object
discriminator: petType
properties:
name:
type: string
petType:
type: string
required:
- name
- petType
Cat:
description: A representation of a cat
allOf:
- $ref: '#/definitions/Pet'
- type: object
properties:
huntingSkill:
type: string
description: The measured skill for hunting
default: lazy
enum:
- clueless
- lazy
- adventurous
- aggressive
required:
- huntingSkill
Dog:
description: A representation of a dog
allOf:
- $ref: '#/definitions/Pet'
- type: object
properties:
packSize:
type: integer
format: int32
description: the size of the pack the dog is from
default: 0
minimum: 0
required:
- packSize
在OpenApi 3中,鉴别器功能有了很大的改进。现在,您提供了一个鉴别器对象,其中包含鉴别器属性的名称,以及该属性的值到模式名称的映射。
(我知道你问过OpenAPI2,但这在3中有很大的改进,希望你能利用它)。
见:https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#discriminatorObject对于v3。0.0规格
根据这个google组,在allOf
属性之上使用了判别器
,并且它被定义在多态的超级类型中。如果不使用判别器
,allOf
关键字描述了一个模型包含其他模型的属性以进行组合。
就像在示例代码中一样,Pet
是一个超级类型,其属性为petType
,标识为鉴别器
,
Cat
是Pet
的子类型。以下是Cat
对象的json示例:
{
"petType": "Cat",
"name": "Kitty"
}
旨在指示用于识别对象类型的属性。假设有一些工具可以使用鉴别器正确支持定义对象,则可以通过扫描属性来确定类型。例如,根据使用
鉴别器petType
识别对象是Cat
。
然而,鉴别器
字段在当前版本的规范或样本中没有得到很好的定义(见第403期)。据我所知,斯威格目前还没有提供适当的工具来支持它。
如果模型具有用于确定类型的属性,则可以使用鉴别器
。在这种情况下,它是自然适合的,并且可以用作其他开发人员理解多态关系的指标。如果考虑支持鉴别器
(请参见本gif和示例中的petType
)的ReDoc等第三方工具,您可能会发现这很有用。
问题内容: 是否可以强制休眠将歧视符列用于继承的继承类型?根据JPA2.0规范,这应该可行,但是我无法在休眠状态下实现。 例: 使用hibernate.hbm2ddl.auto create时,这甚至都不会在表PARENT中创建列TYPE。 我知道InheritanceType.JOINED可以在不定义鉴别符列的情况下工作,但是它是非常无效的,因为在使用鉴别符列中的信息时,休眠需要在父对象和所有子
我正在编写一个服务,它的GET可以返回五种不同但密切相关的类型中的一种。因为用户希望能够一次搜索所有五种类型,所以只能进行一次get调用。我返回的是JSON,可以轻松处理任何类型。 我正试图在斯威格中这样做,使用他们的多态性特性,这是我以前从未尝试过的。我的做法与示例中的一样,只是在“定义”下,而不是在“组件/模式”下。但我收到了一条奇怪的错误信息,我无法理解。下面是swagger文件。错误是这样
Discriminator 是一种 schema 继承机制。 他允许你在相同的底层 MongoDB collection 上 使用部分重叠的 schema 建立多个 model。 假设你要在单个 collection 中记录多种 event, 每个 event 都有时间戳字段,但是 click 事件还有 URL 字段, 这时你可以用 model.discriminator() 实现上述要求。 此函
我有一个标准的多态类型<code>Shape</code>,我可以使用标准的<code>@JsonTypeInfo</code>机制对其进行多态反序列化: 但是,我想添加<code>作为鉴别器属性的别名,以便以下JSON字符串由abstract类反序列化: AND { “?”: “ 这样这个测试案例就会通过 我为什么要这样做?:我试图将两个不同的现有可区分联合编码方案反序列化到同一个类层次结构中
我有一个这样的场景 它的子类具有鉴别器值“creator” 现在,我不想再为帐户类型“user”添加一个类(类似于),因为“creator”和“user”都与帐户类型相关。 我需要一个可能的解决方案,在这里设置我的鉴别器值要么‘创建者’或‘用户’的基础上,帐户的类型。 有没有办法根据条件在类内部设置我的鉴别器值? 我如何继续执行? 请帮帮我。
有人能提供一个简单的例子来解释Java中动态多态性和静态多态性之间的区别吗?