Проверка данных Swagger с allOf и дополнительными свойствами - PullRequest
0 голосов
/ 09 марта 2019

Требуется помощь для определения схемы определения чванства, используя 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 Ответ

1 голос
/ 21 марта 2019

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

Схема 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/

...