JSon模式和inheritance

我已经使用带有inheritance的java绑定搜索了json模式,所有搜索都让我使用了“allOf”。

使用allOf可能会解决我的问题,但我想知道在json架构中是否有一个我可以使用的构造,它将使用真正的javainheritance“B extends A”生成我的java代码 – 而不是从B内部的A内联所有属性?

我想知道这是否支持/可行,或者我只是在做梦。 如果不支持,我很想知道原因。

好吧,我是两者的作者:

  • 当前的JSON Schemavalidation规范;
  • 以及今天Java中用于JSON Schemavalidation的Java库: json-schema-validator 。

所以我可以回答你的问题,基本答案是否定的。

为什么? 因为当前没有定义架构inheritance这样的东西。

使用allOf ,您需要allOf中的所有模式匹配; 如果你对这个或那个JSON中可能存在的内容严格要求,你就会将additionalPropertiesfalse 。 因此,你不能inheritance。

真正的解决方案是我为草案v5提出的一种机制: $merge$patch关键字。 这些将允许使用RFC 7386或RFC 6902(请参阅此处获取更多信息)修补模式,并确实实现模式inheritance。

简而言之:

  • 如果将additionalProperties设置为false ,并且基本JSON是对象,则无法定义其他对象成员;
  • 有了这两个新关键字,你就可以了。

“ jsonschema2pojo ”项目包含用于此目的的符号。

在JSON模式上,只包括这样的东西;

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

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

然后由项目生成的类将其“ extends ”子句作为;

 /** * ... * 

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

您也可以在此处搜索类似的符号。

PS:Theese表示法不是“标准JSON模式结构”。 它们是为了“ 正好 ”而添加的,直到可以采用标准方式。

希望能帮助到你..