#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