JSon 模式和继承
2022-09-01 23:11:49
我已经在json架构上搜索了带有java绑定的继承,所有搜索都使我使用了“allOf”。
使用allOf可能会解决我的问题,但我想知道json模式中是否有一个我可以使用的构造,它将使用真正的java继承“B扩展A”生成我的java代码 - 而不是从A内联到B中的所有属性?
我想知道这是否得到支持/可行,或者我只是在做梦。如果不支持,我会很好奇地想知道原因。
我已经在json架构上搜索了带有java绑定的继承,所有搜索都使我使用了“allOf”。
使用allOf可能会解决我的问题,但我想知道json模式中是否有一个我可以使用的构造,它将使用真正的java继承“B扩展A”生成我的java代码 - 而不是从A内联到B中的所有属性?
我想知道这是否得到支持/可行,或者我只是在做梦。如果不支持,我会很好奇地想知道原因。
好吧,好吧,我是两者的作者:
所以我可以回答你的问题,基本答案是否定的。
为什么?因为当前没有定义架构继承这样的东西。
使用 时,您需要所有架构都匹配;如果你对这个或那个JSON中可以存在的内容很严格,你将添加到 .因此,您不能继承。allOf
allOf
additionalProperties
false
真正的解决方案是我为v5草案提出的一个机制:和关键字。这些将允许使用RFC 7386或RFC 6902修补架构(有关详细信息,请参阅此处),并且确实实现了架构继承。$merge
$patch
总之:
additionalProperties
false
"jsonschema2pojo“项目包含用于此目的的符号。
在 JSON 架构上,只需包含类似如下的内容;
"extendsJavaClass" : "com.somecompany.SomeBaseClass",
即
{
"title": "....",
"description": "....",
"type": "object",
"extendsJavaClass" : "com.somecompany.SomeBaseClass",
"properties": {
"...": {
"items": {
"$ref": "#/definitions/...."
},
"type": "array"
}
.......
}
则项目生成的类将具有其“扩展”子句;
/**
* ...
* <p>
* ...
*
*/
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
...
})
public class MyNewClass
extends SomeBaseClass
{
...
}
您也可以在此处搜索类似的符号。
PS:这些表示法不是“标准 JSON 架构构造”。添加它们是为了“只是这样做”,直到有可能采用标准的方式。
希望它有帮助..