Задать вопрос
@tjarrow

Как корректно отобразить ошибки валидации JSON схемы для ключа anyOf?

Есть JSON схема с таким фрагментом:

{
"required": [
    "label",
    "resource_type",
    "category"
  ],
"properties": {
...
},
"anyOf": [
    {
      "properties": {
        "resource_type": { "enum": ["phone"] },
        "phone": {
          "minLength": 1
        }
      },
      "required": ["phone"]
    },
    {
      "properties": {
        "resource_type": {
          "enum": [
            "audio", "pdf", "url", "video"
          ]
        },
        "url": {
          "minLength": 1
        }
      },
      "required": ["url"]
    },
{
      "properties": {
        "resource_type": { "enum": ["html"] },
        "html_content": {
          "minLength": 1
        }
      },
      "required": ["html_content"]
    },
    {
      "properties": {
        "resource_type": { "enum": ["media_resource"] },
        "media_resource_uuid": {
          "minLength": 1
        }
      },
      "required": ["media_resource_uuid"]
    }
  ]
}
}


Смысл в том, чтобы задавать конкретное поле из properties схемы в качестве обязательного в зависимости от значения поля resource_type. Например, если resource_type: "phone", то поле phone из properties обязательно. Пример валидного объекта:

{
        "label" : "Test label",
        "phone" : "112",
        "resource_type" : "phone",
        "description" : "Test desc",
        "category" : "Test category"
    }


Если сделать поле "phone" пустым, появится ошибка, затрагивающая все поля из anyOf:


Message:
String '' is less than minimum length of 1.
Schema path:
#/anyOf/0/properties/phone/minLength

Message:
Value "phone" is not defined in enum.
Schema path:
#/anyOf/3/properties/resource_type/enum

Message:
Required properties are missing from object: media_resource_uuid.
Schema path:
#/anyOf/3/required

Message:
Required properties are missing from object: html_content.
Schema path:
#/anyOf/2/required

Message:
Required properties are missing from object: url.
Schema path:
#/anyOf/1/required


Как можно обновить схему, чтобы в ошибке выводилась информация только о конкретном anyOf (в данном случае с полем "phone"), а не для всех полей сразу ?
  • Вопрос задан
  • 213 просмотров
Подписаться 1 Простой 1 комментарий
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы