java - Jackson : json schema references other schemas, 可以禁用吗?

标签 java json jsonschema jackson-modules

当我使用 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 实例我会得到我想要的,但事实并非如此,显然有某种缓存,我对这些东西的了解不够深,无法得出正确的结论结论。

谢谢!

最佳答案

您可以覆盖 VisitorContext

SchemaFactoryWrapper visitor = new SchemaFactoryWrapper();
visitor.setVisitorContext(new VisitorContext(){
        @Override
        public String addSeenSchemaUri(JavaType aSeenSchema) {
            return javaTypeToUrn(aSeenSchema);
        }
    });

关于java - Jackson : json schema references other schemas, 可以禁用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26185537/

相关文章:

javascript - Selenium 和 PhantomJS 不解析 Javascript

Java相机实现

java - java中带有类型属性的JSON到XML

json - 如何为Map <String,Integer>定义JSON模式?

java - 使用 websphere liberty 应用程序从经典 websphere 应用程序访问远程 ejb

java - 异常处理问题

php - 从存储的相对路径从mysql php获取图像的绝对路径

javascript - 来自 json 文件的图像未显示在网站上

python - jsonschema.exceptions - 未知类型 'str' 用于具有架构 : 的验证器

JSON Schema 迁移或清理