Jackson Json-Schema-Module を使用すると、相互に参照されている参照を使用してスキーマが生成されます。
次のスキーマを検討してください。
これは POJO1 内のプロパティ オブジェクトです
"myObject" : {
"type" : "object",
"id": "urn:jsonschema:package:myObject"
"properties": {
"property1" : {
"type" : "string"
},
"property2" : {
"type" : "string"
}
}
}
POJO2 内に同じプロパティ オブジェクトがあり、両方のスキーマが生成されると、POJO2 で次のようになります。
"myObject" : {
"type" : "object",
"$ref": "urn:jsonschema:package:myObject"
}
しかし、POJO2'a スキーマのこのプロパティを POJO1 のスキーマと同じにしたいのですが、参照は必要ありません。これを無効にすることはできますか? または回避策はありますか?
私が使用するコードは次のとおりです。
for (Class clazz : classes) {
ObjectMapper m = new ObjectMapper();
SchemaFactoryWrapper visitor = new SchemaFactoryWrapper();
m.acceptJsonFormatVisitor(m.constructType(clazz), visitor);
JsonSchema jsonSchema = visitor.finalSchema();
m.write(new File("json/" + clazz.getSimpleName() + ".json"), jsonSchema);
}
最初は、スキーマの構築ごとに異なる ObjectMapper インスタンスを使用すると、必要なものが得られると思いましたが、そうではないようです。明らかに何らかのキャッシュがあり、そのようなことに関する私の知識は、正しい結論に達するのに十分ではありません。
ありがとう!