Javaバインディングと継承)を使用してjsonスキーマを検索しましたが、すべての検索で「allOf」を使用することになりました。
AllOfを使用すると問題が解決する可能性がありますが、jsonスキーマに使用できる構造があり、それによってJavaコードと実数Java =継承 "B extends A" -B内のAからすべてのプロパティをインライン化するのではなく?
私はこれがサポートされている/実行可能であるかどうか疑問に思っていますか、それとも私はただ夢を見ています。サポートされていない場合は、理由を知りたいと思います。
OK、まあ、私は両方の作者です:
だから私はあなたの質問に答えることができます、そして基本的な答えはノーです。
どうして?現在定義されているスキーマ継承のようなものがないためです。
allOf
を使用する場合、allOf
内のすべてのスキーマが一致する必要があります。また、このJSONまたはそのJSONに何が存在するかについて厳密な場合は、additionalProperties
をfalse
に追加します。そのため、継承することはできません。
本当の解決策は、ドラフトv5で提案したメカニズムです。$merge
および$patch
キーワード。これらにより、RFC7386またはRFC6902のいずれかでスキーマにパッチを適用し(詳細については ここ を参照)、実際にスキーマの継承を実装できます。
要するに:
additionalProperties
をfalse
に設定し、基本的なJSONがオブジェクトである場合、追加のオブジェクトメンバーを定義することはできません。" jsonschema2pojo "プロジェクトには、この目的のための表記が含まれています。
JSONスキーマには、次のようなものを含めてください。
"extendsJavaClass" : "com.somecompany.SomeBaseClass",
つまり.
{
"title": "....",
"description": "....",
"type": "object",
"extendsJavaClass" : "com.somecompany.SomeBaseClass",
"properties": {
"...": {
"items": {
"$ref": "#/definitions/...."
},
"type": "array"
}
.......
}
その場合、プロジェクトによって生成されたクラスには、「extends」句があります。
/**
* ...
* <p>
* ...
*
*/
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
...
})
public class MyNewClass
extends SomeBaseClass
{
...
}
また、 ここ で同様の表記を検索できます。
PS:これらの表記は「標準のJSONスキーマ構造」ではありません。これらは、標準的な方法が可能になるまで、「 実行するだけ "」のために追加されます。
それが役に立てば幸い..