1

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

我没有找到可以做到这一点的工具。

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

是否有任何 Java JSON(反)序列化器可以做到这一点?

4

2 回答 2

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"
    }
  }
}
于 2014-07-09T12:59:41.480 回答
0

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)
}
于 2014-04-19T02:54:01.803 回答