【问题标题】:Schema serialization with annotations also serialized带有注释的模式序列化也被序列化
【发布时间】:2014-04-18 03:14:14
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: java json jackson avro thrift-protocol


    【解决方案1】:

    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)
    }
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-08-31
        • 1970-01-01
        • 2019-05-14
        • 2020-05-01
        • 2014-08-31
        • 1970-01-01
        • 2014-07-01
        相关资源
        最近更新 更多