ajv validate не работает с правильными данными схемы, которые НЕ должны иметь дополнительных свойств

Я использую ajv для проверки некоторых данных JSON перед их записью в базу данных. Данные моего запроса в основном выглядят так (в качестве примера):

документ:

"name": "John",
"id": "123-456-789"

Это передается валидатору ajv:

const validator: ajv.Ajv = this.getValidator();
validator.validate("Testschema.out", doc)

Так выглядит Testschema.out

{
    "id": "Testschema.out",
    "type": "object",
    "allOf": [{
            "$ref": "anotherId#/definitions/someDefinition"
        },
        {
            "$ref": "Testschema"
        }
    ]
}

Testschema содержит следующее:

{
    "id": "Testschema",
    "type": "object",
    "properties": {
        "name": {
            "type": "string"
        }
    },
    "additionalProperties": false,
    "required": [
        "name"
    ]
}

В то время как someDefinition содержит это:

{
    "id": "anotherId",
    "type": "object",
    "definitions": {
        "someDefinition": {
            "type": "object",
            "properties": {
                "id": {
                    "type": "string"
                }
            }
        }
    }
}

Однако проверка завершается неудачно, и я получаю сообщение об ошибке "data should NOT have additional properties". В частности, что-либо в схеме "anotherId" по какой-либо причине не проходит проверку. Если я добавлю свойство «id» в Testschema, тогда проверка пройдет.


person Attila    schedule 11.08.2017    source источник


Ответы (1)


Оказывается, проблема связана с ключевым словом allOf и "additionalProperties": false в «Тестсхеме». См.: https://spacetelescope.github.io/understanding-json-schema/reference/combining.html#allof

Кажется, что новое ключевое слово $merge является ответом на это: https://github.com/epoberezkin/ajv-merge-patch

person Attila    schedule 11.08.2017