Swagger 中鉴别器内的映射有什么作用?

Art*_*kov 0 documentation rest swagger openapi

文档中的解释对我来说不清楚。我的 api 文档渲染后没有看到任何差异。
视觉上有什么区别?从逻辑上讲,映射是做什么的?例如

MySchema:
  oneOf:
    - $ref: '#/componets/schemas/SubSchema1'
    - $ref: '#/componets/schemas/SubSchema2'
  discriminator:
    propertyName: some_property:
    mapping:
      TypeA: '#/componets/schemas/SubSchema1'
      TypeB: '#/componets/schemas/SubSchema2'
Run Code Online (Sandbox Code Playgroud)

Sni*_*oti 5

所以如果你使用editor.swagger.io不会有太大区别。如果我想验证鉴别器,我会使用Redoc 。

让我们举个例子:您想要将读数转换为您首选的测量单位(即usStandard)您的请求对象可能如下所示 -

{
  "value": 7,
  "unitOfMeasure": {
    "type": "distance",
    "value": "km"
  }
}
Run Code Online (Sandbox Code Playgroud)

所以转换后你的 API 将返回

{
  "value": 4.3496,
  "unitOfMeasure": {
    "type": "distance",
    "value": "mi"
  }
}
Run Code Online (Sandbox Code Playgroud)

因此,根据您的测量单位类型,您必须使用不同的模式。
如果type

  1. distance那么可能的值kmmi
  2. volume那么可能的值Lgal

因此,您的 OpenAPI 规范您的鉴别器将使用类型属性来确定要使用的模式。注意:在这种情况下,类型将是每个模式中的必需属性。

这和jackson的类型是一样的

@JsonTypeInfo(
    use = JsonTypeInfo.Id.CUSTOM,
    property = "type",
    include = JsonTypeInfo.As.EXISTING_PROPERTY)
public abstract class UOM {
}

@JsonTypeName("distance")
public class DistanceUOM extends UOM {
}
Run Code Online (Sandbox Code Playgroud)

Jackson 将使用 type 来确定它应该反序列化到哪个类。


使用此用例创建了 github 要点请参阅此处

那么Redoc将如何渲染它(请参阅有一个下拉菜单来选择类型)

类型:距离

在此输入图像描述

类型: 体积

在此输入图像描述