JSon schema and Inheritance

半世苍凉 提交于 2019-11-29 09:11:46

OK, well, I am the author of both:

  • the current JSON Schema validation spec;
  • and the Java library which is the most used for JSON Schema validation in Java today: json-schema-validator.

So I can answer your question, and the basic answer is no.

Why? Because there is no such thing as schema inheritance currently defined.

When using allOf, you require that all schemas in allOf match; and if you are strict about what can exist in this or that JSON, you'll have added additionalProperties to false. As such, you cannot inherit.

The real solution is a mechanism I proposed for draft v5: the $merge and $patch keywords. These would allow to patch schemas with either of RFC 7386 or RFC 6902 (see here for more info) and indeed implement schema inheritance.

In short:

  • if you set additionalProperties to false, and your basic JSON is an object, you won't be able to define additional object members;
  • with these two new keywords, you can.

"jsonschema2pojo" project contains notations for this purpose.

On the JSON schema, just include something like this;

"extendsJavaClass" : "com.somecompany.SomeBaseClass",

i.e.

{
  "title": "....",
  "description": "....",
  "type": "object",
  "extendsJavaClass" : "com.somecompany.SomeBaseClass",
  "properties": {
    "...": {
      "items": {
        "$ref": "#/definitions/...."
      },
      "type": "array"
    }
    .......
}

then the class generated by the project will have its "extends" clause as;

/**
 * ...
 * <p>
 * ...
 * 
 */
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
    ...
})
public class MyNewClass
    extends SomeBaseClass
{
...
}

Also you can search for similar notations in here.

PS: Theese notations are not "standard JSON schema constructs". They are added for the sake of "just doing it" until a standard way of doing it is possible.

Hope it helps..

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!