【发布时间】:2014-10-03 19:30:24
【问题描述】:
当我使用 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 实例,我会得到我想要的,但事实并非如此,显然有某种缓存,我对这些事情的了解还不够深入,无法正确结论。
谢谢!
【问题讨论】:
-
我有完全相同的查询...
-
我找到了答案。
-
Tatu 回复: Tatu Saloranta 昨天回复 感谢您的报告 -- 这是一个不幸的错误;虽然正确创建了 VisitorContext 的实例,但早期修复的一部分忽略了 Map 仍然是静态的事实。因此,2.4.4(和 2.5)将进行修复。
标签: java json jsonschema jackson-modules