我搜索了带有继承的 java 绑定(bind)的 json 模式,所有搜索都让我找到了“allOf”的用法。
使用 allOf 可能会解决我的问题,但我想知道我是否可以使用 json 模式中的构造,它会生成具有真正 java 继承“B extends A”的 java 代码——而不是内联 A 的所有属性在 B 里面?
我想知道这是否受支持/可行,或者我只是在做梦。如果不支持,我很想知道原因。
最佳答案
好吧,我是两者的作者:
- 当前的 JSON Schema 验证规范;
- 以及当今 Java 中最常用于 JSON 模式验证的 Java 库:json-schema-validator .
所以我可以回答你的问题,基本的答案是否定的。
为什么?因为目前还没有定义模式继承这样的东西。
当使用 allOf
时,您需要 allOf
中的所有模式匹配;如果您对这个或那个 JSON 中可以存在的内容很严格,您将添加 additionalProperties
到 false
。因此,您不能继承。
真正的解决方案是我为 v5 草案提出的一种机制:$merge
和 $patch
关键字。这些将允许使用 RFC 7386 或 RFC 6902 修补模式(有关更多信息,请参阅 here)并确实实现模式继承。
简而言之:
- 如果您将
additionalProperties
设置为false
,并且您的基本JSON是一个对象,您将无法定义额外的对象成员; - 使用这两个新关键字,您可以。
关于java - JSON 模式和继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27410216/