【问题标题】:Jackson Deserialization By InheritanceJackson 继承反序列化
【发布时间】:2020-09-13 18:23:01
【问题描述】:

我有一个具有以下结构的类

Class A { private String type; private T entity; }

而我的JSON结构是这样的

{"type":"Relation1","entity":"{..}"} --> entity should be Relation1.class
{"type":"Relation2","entity":"{..}"}  --> entity should be Relation2.class

如何使用 Jackson deserilizaton 达到预期的效果?

【问题讨论】:

标签: java inheritance jackson polymorphism jackson-databind


【解决方案1】:

如果您在模型中使用继承,您将无法获得如图所示的干净 json,因为 Jackson 无法反序列化 json。 如果你想使用 Jackson,你必须配置 ObjectMapper:

ObjectMapper mapper = new ObjectMapper();
mapper.enableDefaultTyping();

然后您将获得一个包含反序列化过程所需的 T 类名称的 Json。

您可以在此处找到完整指南:Guide

【讨论】:

  • 如果我把private T entity;改成private AbstractRelation entity;会有帮助
  • 不,对不起。但是如果 Relation1 和 Relation2 具有相同的字段,您可以设置一个具体的超类 Relation 并将其放入模型中。通过这种方式,您的 json 将变得清晰,并且当您反序列化 json 时,您将获得一个 Relaction 实例。然后从字段的值中,您可以将实例转换为正确的 RelationN 类。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-31
  • 2012-11-16
  • 1970-01-01
  • 1970-01-01
  • 2012-11-19
相关资源
最近更新 更多