Схема 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 to false, и ваш базовый 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 строит." Они добавляются ради "просто делать это " до тех пор, пока это не станет возможным стандартным способом.

надеюсь, что это помогает..