4

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 インスタンスを使用すると、必要なものが得られると思いましたが、そうではないようです。明らかに何らかのキャッシュがあり、そのようなことに関する私の知識は、正しい結論に達するのに十分ではありません。

ありがとう!

4

4 に答える 4

0

参照を格納するクラス VisitorContext があり、そのメソッドは静的であるため、このクラスのソース コードを変更することでこの問題を解決しました。

于 2014-10-16T08:59:58.533 に答える
-1

この行を確認できると思います:

m.acceptJsonFormatVisitor(m.constructType(clazz), visitor);

clazzってどんなクラス?よくわかりませんが、代わりに clazz 次のようなことを試すことができます:

myclass.class
于 2014-10-04T07:14:09.027 に答える