説明
discriminator はプロパティーの値を使い、多態的なデータに適用するスキーマを区別します。OpenAPI 3.0 では discriminator.propertyName、OpenAPI 2.0 では文字列の discriminator で名前を指定します。実際のデータやスキーマ定義と一致しないと、型の判別が不明確になります。
想定される影響
クライアントとサーバーが異なる派生型を選んだり、コード生成ツールが意図したモデルを構成できなかったりする可能性があります。
対処方法
指定したプロパティーが実際のデータ仕様と該当するスキーマに定義されているか確認してください。合成・参照されたスキーマ、必須指定、値と対象スキーマの対応関係も確認してください。
例
OpenAPI 3.0 の親スキーマのプロパティーだけを示す抜粋です。派生スキーマや allOf などの合成、info、paths は省略しています。変更前は petType の存在を要求しますが、値の形式を定義していません。
変更前
json
{
"openapi": "3.0.0",
"components": {
"schemas": {
"GeneralError": {
"type": "object",
"discriminator": {
"propertyName": "petType"
},
"properties": {
"code": {
"type": "integer"
},
"message": {
"type": "string"
}
},
"required": [
"petType"
]
}
}
}
}
変更後
json
{
"openapi": "3.0.0",
"components": {
"schemas": {
"GeneralError": {
"type": "object",
"discriminator": {
"propertyName": "petType"
},
"properties": {
"code": {
"type": "integer"
},
"message": {
"type": "string"
},
"petType": {
"type": "string"
}
},
"required": [
"petType"
]
}
}
}
}
変更後は petType を文字列として定義しています。実際の多態モデルでは、この値と選択する派生スキーマも対応している必要があります。