当前位置: 首页 > 知识库问答 >
问题:

带有注释的模式序列化也序列化了

张和颂
2023-03-14

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

我没有找到这样做的工具。

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

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

共有2个答案

娄鹤轩
2023-03-14

如今,Jackson JSON模式模块支持循环依赖。下面是一个适用于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"
    }
  }
}
谭昊乾
2023-03-14

Apache Thrift在大多数语言中支持复杂的映射键,并且对JSON序列化有相当广泛的支持。类型循环(自引用类型等)最近被引入,尚未在广泛的语言中发布或实现。也就是说,似乎有一个坚定的promise,要在近期将这一能力提升到波兰的高度。

今天使用C dev主干可以实现以下功能。

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

service simple {
   void hello(1: string msg, 2: tree t)
}
 类似资料:
  • 我给一个有json主体的aws lambda打电话。因此,json的字段与POJO中的字段具有不同的名称。所以我所做的就是在字段中添加@JsonProperty,告诉jackson json中的名称。但出于某种原因,它似乎无法识别它们,并且所有字段都为空。如果我传递一个与POJO具有相同字段名的json,它就会工作。这是我的课: 如果我通过 所有的字段都是空的,并且有明显的ID、userId、ev

  • 问题内容: 我正在用json主体调用aws lambda。因此json的字段与POJO中的字段名称不同。所以我要做的是在字段上添加@JsonProperty来告诉杰克逊json中的名字是什么。但是由于某种原因,它似乎无法识别它们,并且所有字段均为空。如果我传递一个具有与POJO相同的字段名称的json,那么它将起作用。这是我的课: 如果我通过 所有字段均为null,并且具有distinctId,u

  • 课程对象不包装在标记中 某些属性是属性 我需要如何注释我的对象以使FasterXML反序列化这个XML?

  • 例如: 我知道有jackson注解可以这样做,但是我的字段已经用我的持久性注解进行了注解,所以我想避免重复,因为我已经有了我想忽略的注解的字段

  • 我有一个Pojo对象,由Jersey使用jackson序列化: 序列化产生了一个像这样的Json: 但是,当我尝试像这样反序列化来自客户端的消息时: 我得到以下错误: 无法识别的字段“键”(类com.example.server.api.书摘),未标记为可忽略 我不知道问题是来自服务器生成的JSOn还是来自客户端的反序列化。 您知道问题是什么以及如何纠正吗? 非常谢谢。

  • 我一直在尝试将avro通用记录进行串行化,并生成avro串行化的数据发送给Kafka。主要目标是不使用合并模式注册表存储模式,而是将模式与序列化数据一起发送,以便从kafka主题中提取并反序列化。 下面是AvroSerializer用于生成Avro数据的部分。 Kafka中出现的序列化数据如下所示。