Схема JSon и наследование
Я искал по схеме json с привязками java с наследованием, и все поиски привели меня к использованию "allOf".
использование allOf потенциально решит мою проблему, но мне интересно, есть ли конструкция в схеме json, которую я могу использовать, которая будет генерировать мой java - код с реальным наследованием java "B расширяет A", а не вставляет все свойства изнутри B ?
Мне интересно, поддерживается ли это / выполнимо, или я просто мечтаю. Если нет поддержал, мне было бы любопытно узнать причину.
2 ответов
хорошо, хорошо, я автор обоих:
- текущая спецификация проверки схемы JSON;
- и библиотека Java, которая наиболее используется для проверки схемы JSON в Java сегодня:JSON-schema-validator.
так я могу ответить на ваш вопрос, и ответ нет.
почему? Потому что в настоящее время нет такой вещи, как наследование схемы.
при использовании allOf
, вы требуете, чтобы все схемы allOf
match; и если вы строги о том, что может существовать в том или ином JSON, вы добавите additionalProperties
to false
. Таким образом, вы не можете наследовать.
реальное решение-это механизм, который я предложил для проекта v5:$merge
и $patch
ключевые слова. Это позволит исправлять схемы с помощью RFC 7386 или RFC 6902 (см. здесь для получения дополнительной информации) и действительно реализовать наследования.
короче:
- если вы установите
additionalProperties
tofalse
, и ваш базовый JSON является объектом, вы не сможете определить дополнительные члены объекта; - С этими двумя новыми ключевыми словами вы можете.
"jsonschema2pojo проект" содержит обозначения для этой цели.
в схеме JSON просто включите что-то вроде этого;
"extendsJavaClass" : "com.somecompany.SomeBaseClass",
то есть
{
"title": "....",
"description": "....",
"type": "object",
"extendsJavaClass" : "com.somecompany.SomeBaseClass",
"properties": {
"...": {
"items": {
"$ref": "#/definitions/...."
},
"type": "array"
}
.......
}
тогда класс, созданный проектом, будет иметь свой"выходит" пункт as;
/**
* ...
* <p>
* ...
*
*/
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
...
})
public class MyNewClass
extends SomeBaseClass
{
...
}
также вы можете искать аналогичные обозначения в здесь.
PS: эти обозначения не являются " стандартной схемой JSON строит." Они добавляются ради "просто делать это " до тех пор, пока это не станет возможным стандартным способом.
надеюсь, что это помогает..