java - JSON 模式和继承

标签 java json inheritance binding jsonschema

我搜索了带有继承的 java 绑定(bind)的 json 模式,所有搜索都让我找到了“allOf”的用法。

使用 allOf 可能会解决我的问题,但我想知道我是否可以使用 json 模式中的构造,它会生成具有真正 java 继承“B extends A”的 java 代码——而不是内联 A 的所有属性在 B 里面?

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

最佳答案

好吧,我是两者的作者:

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

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

为什么?因为目前还没有定义模式继承这样的东西。

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

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

简而言之:

  • 如果您将additionalProperties设置为false,并且您的基本JSON是一个对象,您将无法定义额外的对象成员;
  • 使用这两个新关键字,您可以。

关于java - JSON 模式和继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27410216/

相关文章:

c# - 当继承类的基类也有验证时,如何对继承类的模型进行验证?

java - JAX-RS 响应对象将对象字段显示为 NULL 值

java - Android:这个VideoView出了什么问题?

javascript - 如何使用循环获取这些数据?

c# - WCF 休息服务 : WebInvoke with JSON and polymorphism does not work correctly

json - Backbone.js Collection.sync 和 spring 端点

inheritance - 如何避免 Entity Framework TPT 继承中的多态行为以有效查询基类型

PHP:将一个类的所有函数包装在一个子类中

java - Android Studio的Gradle Sync(SDK)问题

java - 努力存储生成的盐以进行 aes 加密/解密