discriminator のプロパティー定義の確認

型の判別に使うプロパティー名を、実際のデータとスキーマ定義に合わせてください。

説明

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 を文字列として定義しています。実際の多態モデルでは、この値と選択する派生スキーマも対応している必要があります。

参考資料