带注释的模式序列化也是序列化的

时间:2014-04-18 03:14:14

标签: java json jackson avro thrift-protocol

我们希望序列化Java类的模式,以便任何字段或类上的所有注释也被序列化到模式中。

我找不到那样做的工具。

Avro不处理非字符串映射键,FasterXML不处理循环引用。 并且它们都没有将注释序列化到模式中。

是否有任何Java JSON(de)序列化程序可以执行此操作?

2 个答案:

答案 0 :(得分:0)

Apache Thrift支持大多数语言的复杂映射键,并且对JSON序列化有相当广泛的支持。最近引入了类型循环(自引用类型等),并且尚未以多种语言发布或实现。这表示似乎有一种坚定的承诺,即在短期内将这种能力提升到高度的状态。

今天使用C ++ dev trunk可以使用以下内容。

struct tree {
   1: tree left (cpp.ref="")
   2: tree right (cpp.ref="")
}

service simple {
   void hello(1: string msg, 2: tree t)
}

答案 1 :(得分:0)

现在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"
    }
  }
}