java – Jackson:json schema引用其他模式,这可以被禁用吗?

当我使用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实例,我会得到我想要的,但不是这种情况,显然存在某种缓存,我对这些事情的了解不够深入,无法得出正确的结论.

谢谢!

解决方法:

您可以简单地覆盖hashset并使用java反射设置它,如下所示:

Field f = visitorContext.getClass().getDeclaredField("seenSchemas");
      f.setAccessible(true);
      f.set(visitorContext, dummyHashSet);
上一篇:数据结构与算法专题——第十一题 Treap树


下一篇:python – 验证ip-address的JSON Schema无法正常工作