JSon模式和继承

use*_*879 18 java inheritance binding json jsonschema

我已经使用带有继承的java绑定搜索了json模式,所有搜索都让我使用了"allOf".

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

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

fge*_*fge 22

好吧,我是两者的作者:

  • 当前的JSON Schema验证规范;
  • 以及今天Java中用于JSON Schema验证的Java库:json-schema-validator.

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

为什么?因为当前没有定义架构继承这样的东西.

使用时allOf,您需要allOf匹配所有模式; 如果你对这个或那个JSON中可能存在的内容很严格,那么你将添加additionalPropertiesfalse.因此,你不能继承.

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

简而言之:

  • 如果设置additionalPropertiesfalse,并且您的基本JSON是一个对象,您将无法定义其他对象成员;
  • 有了这两个新关键字,你就可以了.