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

时间:2016-07-07 20:24:31

标签: java json jackson

鉴于任意类,Jackson是否有可能提供序列化和反序列化所需字段的列表?

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

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

1 个答案:

答案 0 :(得分:2)

是的,你可以使用杰克逊的内省。这样做的好处是所有注释都按预期应用,结果应该与杰克逊“看到”您想要了解的类型完全相同。

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

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

    第一种方法通常更简单:

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

    但后者对于生成模式(JSON Schema,XML Schema,protoc,thrift)等任务非常有用。