java - 给定一个类,如何获取类序列化的jackson结构?

标签 java json jackson

给定一个任意类,Jackson 是否可以提供序列化和反序列化所需的字段列表?

jackson serialization rules很复杂。我想在运行时确定任意类(序列化和反序列化)期望的 Jackson JSON 结构。我目前计划的实现是寻找一个 @JsonConstructor 构造函数方法并解析它的参数。如果不存在,请查找其他方法的注释,否则,使用成员变量列表。我将为任何非原始字段类型递归该算法。

最终目标是为服务端点创建文档。

最佳答案

是的,您可以使用 Jackson 的内省(introspection)。这样做的好处是所有注释都按预期应用,结果应该与 Jackson“看到”您想要的信息类型完全一样。

至少有两种方法可以做到这一点:

  1. 通过SerializationConfig(或DeserializatonConfig)请求自省(introspection),以获得BeanDescription
  2. 通过调用 ObjectMapper.acceptJsonFormatVisitor(type, visitor) 使用基于回调/访问者的方法

第一种方法通常更简单:

JavaType type = mapper.constructType(MyBean.class);
BeanDescription desc = mapper.getSerializationConfig()
   .introspect(type);

但后者对于生成模式(JSON 模式、XML 模式、protoc、thrift)等任务很有用。

关于java - 给定一个类,如何获取类序列化的jackson结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38254621/

相关文章:

java - 在Junit测试中,如何使用assertEquals()比较两个ArrayList<Double>,是否有更好的替代方案?

java - 创建复杂的 Json 结构

json - Shopify 履行

java - 转换为 JSON 时如何使用 Java Enum 的属性

java - jackson 奇怪的 XML 反序列化

java - 内部类上的 Android 数据绑定(bind)不更新 TextView

java - Spring PollableChannel - 无法将loggingEnabled设置为false?

json - 使用 Grails 在服务器端获取 JSON 数据

php - 如何通过 AFNetworking API 调用使用 gzip 解压缩?

java - 是否可以判断请求JSON中是否存在参数