Я пытаюсь выяснить, как работает oneOf, создавая схему, которая проверяет два разных типа объектов. Например, человек (имя, фамилия, спорт) и транспортные средства (тип, стоимость).Пример Json Schema для объектов oneOf
Вот некоторые примеры объектов:
{"firstName":"John", "lastName":"Doe", "sport": "football"}
{"vehicle":"car", "price":20000}
Вопрос заключается в том, что я сделал неправильно и как я могу это исправить. Вот схема:
{
"description": "schema validating people and vehicles",
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"required": [ "oneOf" ],
"properties": { "oneOf": [
{
"firstName": {"type": "string"},
"lastName": {"type": "string"},
"sport": {"type": "string"}
},
{
"vehicle": {"type": "string"},
"price":{"type": "integer"}
}
]
}
}
Когда я пытаюсь проверить его в этом парсер:
https://json-schema-validator.herokuapp.com/
Я получаю следующее сообщение об ошибке:
[ {
"level" : "fatal",
"message" : "invalid JSON Schema, cannot continue\nSyntax errors:\n[ {\n \"level\" : \"error\",\n \"schema\" : {\n \"loadingURI\" : \"#\",\n \"pointer\" : \"/properties/oneOf\"\n },\n \"domain\" : \"syntax\",\n \"message\" : \"JSON value is of type array, not a JSON Schema (expected an object)\",\n \"found\" : \"array\"\n} ]",
"info" : "other messages follow (if any)"
}, {
"level" : "error",
"schema" : {
"loadingURI" : "#",
"pointer" : "/properties/oneOf"
},
"domain" : "syntax",
"message" : "JSON value is of type array, not a JSON Schema (expected an object)",
"found" : "array"
} ]
Это сработало. Спасибо! – Bloodcount
Помогает ли 'oneOf' в проверке запроса? Я не вижу никакой аннотации jackson для 'oneOf' во время преобразования pojo –
@ gursahib.singh.sahni, то есть конкретной проблемы с Джексоном. Нелегко перевести одну семантику на некоторые языки программирования, такие как java. Вам нужны некоторые конструкции типа Disjoint, Discriminated Unions, Union Types ..., которые есть на других языках. – jruizaranguren