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을 문자열 속성으로 정의합니다. 실제 다형성 모델에서는 이 값이 선택할 하위 스키마와도 일치해야 합니다.

참조