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

What does mapping within discriminator do in Swagger?

explanation in the doc 我不是很清楚。在我的 api 文档呈现后,我看不出有什么不同。
视觉上有什么区别?在什么映射逻辑上做? 例如

MySchema:
  oneOf:
    - $ref: '#/componets/schemas/SubSchema1'
    - $ref: '#/componets/schemas/SubSchema2'
  discriminator:
    propertyName: some_property:
    mapping:
      TypeA: '#/componets/schemas/SubSchema1'
      TypeB: '#/componets/schemas/SubSchema2'

所以如果你使用 editor.swagger.io it won't be much of a difference. I use Redoc 如果我想验证鉴别器。

举个例子: 您想将读数转换为您首选的测量单位(即 usStandard) 您的请求对象可能看起来像这样 -

{
  "value": 7,
  "unitOfMeasure": {
    "type": "distance",
    "value": "km"
  }
}

所以转换后你的 API 将 return

{
  "value": 4.3496,
  "unitOfMeasure": {
    "type": "distance",
    "value": "mi"
  }
}

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

  1. distance 然后可能的值 kmmi
  2. volume 然后可能的值 Lgal

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

这与杰克逊的类型相同

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

@JsonTypeName("distance")
public class DistanceUOM extends UOM {
}

并且 jackson 将使用类型来确定 class 它应该反序列化到哪个位置。


使用此用例创建了 github 要点 See Here

那么 Redoc 将如何呈现它(请参阅 select 类型的下拉菜单)

类型:距离

类型:卷