Проверка достоверности данных с помощью allOf и дополнительных свойств

#swagger #ajv

#swagger #ajv

Вопрос:

Нужна помощь в решении схемы определения swagger с использованием allOf и дополнительных свойств: false

Вот моя схема JSON

 "deliveryContact": {
      "allOf": [
        {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "name": {
              "type": "string",
              "maxLength": 1024
            },
            "phone": {
              "type": "string",
              "maxLength": 24
            }
          }
        },
        {
          "$ref": "#/definitions/address"
        }
      ]
    },
    "address": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "address": {
          "type": "string",
          "maxLength": 1024
        },
        "postalCode": {
          "type": "string",
          "maxLength": 12
        },
        "city": {
          "type": "string",
          "maxLength": 512
        },
        "state": {
          "type": "string",
          "maxLength": 512
        }
      }
    },
  

Примеры данных

                    delivery: {
                        address: 'my address',
                        postalCode: 'my postalCode',
                        city: 'my city',
                        state: 'my state',
                        name: 'my name',
                        phone: 'my phone'
                    },

  

Я использую AJV 6.10.0 для проверки своих данных, но я думаю, что у меня неправильное определение схемы.
С параметрами Ajv :

         ajv = require('ajv')({
            allErrors: true,
            verbose: true,
            removeAdditional: false,
        });
  

На самом деле, у меня есть 6 ошибок, которые предупреждают о дополнительных свойствах для каждого свойства

Во время проверки первого объекта в allOf (имя и телефон) проверка обнаружила ошибку в (адрес, почтовый индекс, город и штат)

Если я удалю дополнительные свойства первого объекта allOf (имя, телефон), во время проверки схемы адресов проверка обнаружила ошибку в (имя и телефон)

Как я могу решить мое определение схемы

Ответ №1:

Мне удалось заставить это работать, я обновил вашу структуру данных, чтобы она была более логичной, см. Ниже :

Схема JSON

 {
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "required": [
    "delivery"
  ],
  "properties": {
    "delivery": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "name",
        "phone",
        "address"
      ],
      "properties": {
        "name": {
          "type": "string",
          "maxLength": 1024
        },
        "phone": {
          "type": "string",
          "maxLength": 24
        },
        "address": {
          "$ref": "#/definitions/address"
        }
      }
    }
  },
  "definitions": {
    "address": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "address": {
          "type": "string",
          "maxLength": 1024
        },
        "postalCode": {
          "type": "string",
          "maxLength": 12
        },
        "city": {
          "type": "string",
          "maxLength": 512
        },
        "state": {
          "type": "string",
          "maxLength": 512
        }
      }
    }
  }
}
  

Примеры данных

 {
  "delivery": {
    "address": {
      "address": "myaddress",
      "postalCode": "mypostalCode",
      "city": "mycity",
      "state": "mystate"
    },
    "name": "myname",
    "phone": "myphone"
  }
}
  

Если вы хотите протестировать это, вы можете сделать это здесь : https://www.jsonschemavalidator.net