一尘不染

JSon模式和继承

json

我已经使用具有继承性的Java绑定搜索了json模式,并且所有搜索都导致我使用“ allOf”。

使用allOf可能会解决我的问题,但我想知道json模式中是否有可以使用的构造,该构造将生成具有真实Java继承“ B扩展A”的Java代码-
而不是在B内插入A的所有属性?

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


阅读 381

收藏
2020-07-27

共1个答案

一尘不染

好吧,我是两者的作者:

  • 当前的JSON Schema验证规范;
  • 以及当今在Java中最常用于JSON模式验证的Java库:json-schema-validator

因此,我可以回答您的问题,而基本答案是“否”。

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

使用时allOf,您需要所有模式都allOf匹配;并且如果您对此JSON中存在的内容严格要求,则将添加additionalProperties到中false。因此,您无法继承。

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

简而言之:

  • 如果设置additionalPropertiesfalse,并且基本JSON是对象,则将无法定义其他对象成员;
  • 使用这两个新关键字,您可以。
2020-07-27