【发布时间】:2014-04-18 03:14:14
【问题描述】:
我们希望序列化 Java 类的模式,这样任何字段或类上的所有注释也都序列化到模式中。
我没有找到可以做到这一点的工具。
Avro 不处理非字符串映射键,FasterXML 不处理循环引用。 而且它们都没有将注解序列化到模式中。
是否有任何 Java JSON(反)序列化器可以做到这一点?
【问题讨论】:
标签: java json jackson avro thrift-protocol
我们希望序列化 Java 类的模式,这样任何字段或类上的所有注释也都序列化到模式中。
我没有找到可以做到这一点的工具。
Avro 不处理非字符串映射键,FasterXML 不处理循环引用。 而且它们都没有将注解序列化到模式中。
是否有任何 Java JSON(反)序列化器可以做到这一点?
【问题讨论】:
标签: java json jackson avro thrift-protocol
Apache Thrift 支持大多数语言的复杂映射键,并且对 JSON 序列化有相当广泛的支持。最近引入了类型循环(自引用类型等),但尚未在多种语言中发布或实现。也就是说,似乎有坚定的承诺在短期内将这种能力提升到一个高度的状态。
今天使用 C++ 开发主干可以实现以下类似操作。
struct tree {
1: tree left (cpp.ref="")
2: tree right (cpp.ref="")
}
service simple {
void hello(1: string msg, 2: tree t)
}
【讨论】:
现在Jackson JSON Schema Module 支持循环依赖。下面是一个适用于 2.4.1 版本的示例:
public class JacksonSchemaCyclic {
public static class Bean {
@JsonPropertyDescription("This is a property description")
public String anExample;
public int anInt;
public Bean aBean;
}
public static void main(String[] args) throws JsonProcessingException {
ObjectMapper mapper = new ObjectMapper();
SchemaFactoryWrapper visitor = new SchemaFactoryWrapper();
mapper.acceptJsonFormatVisitor(Bean.class, visitor);
JsonSchema jsonSchema = visitor.finalSchema();
System.out.println(mapper
.writerWithDefaultPrettyPrinter().writeValueAsString(jsonSchema));
}
}
输出:
{
"type" : "object",
"id" : "urn:jsonschema:stackoverflow:JacksonSchemaCyclic:Bean",
"properties" : {
"aBean" : {
"type" : "object",
"$ref" : "urn:jsonschema:stackoverflow:JacksonSchemaCyclic:Bean"
},
"anInt" : {
"type" : "integer"
},
"anExample" : {
"type" : "string",
"description" : "This is a property description"
}
}
}
【讨论】: