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

Jackson多态性

缪远
2023-03-14

我有一个类动物和扩展动物的子类猫和狗。我有一个名为Zoo的类,其中有一个变量作为List;

i、 e。

Class Animal {
  String name;

}

 Class Cat Extends Animal {
 String color;
}

Class Zoo {
  List<Animal> animalsInZoo;
  public void printAnimalClass()
  { 
    for(Animal a :animalsInZoo)
   {
    System.out.println(a.getClass.getName());
   } 
  }
 }

zoo对象将包含可以是Animal对象或Animal子类的动物,下面是zoo类对象的JSON表示示例。

 { "animalsInZoo" : 
   [
     {"name":"A"},
     {"name": "B","color":"white"}
   ]
  }

我必须将其转换为java对象,以便列表中的第一个动物被转换为类animal的对象,第二个被转换为类Cat的对象

共有1个答案

充星腾
2023-03-14

假设你有另一个具有相同属性的动物,你必须自己进行转换:

Class Horse Extends Animal {
    String color;
}

杰克逊不知道将{“name”:“B”,“color”:“white”}转换成猫或马。

您可以添加属性来标记需要转换为的动物。

 类似资料:
  • 当我想使用多态成员反序列化实体时,Jackson会抛出一个,抱怨缺少类型信息(...它实际上存在于JSON中- 所有实际工作都是由Spring HATEOAS的分页和排序存储库完成的。 我使用spring boot V 1.2.4。发布,这意味着jackson版本为2.4.6,Spring HATEOAS版本为0.16.0。释放。 例子: 我家里有一只宠物: 该宠物是某种动物——在本例中是猫或狗。

  • 我对Jackson和类型层次结构有以下问题。我正在序列化一个类SubA,该类将扩展为一个字符串,然后尝试将其反序列化回来。当然,在编译时,系统不知道它是基还是SubA,因此我希望它是基,如果它是SubA,则会在编译后执行一些其他操作。 我的基本类看起来像: ...和一个派生自的类: ... 我试图执行以下代码: String是: 但我一次又一次地犯同样的错误。映射器现在知道如何处理另一个类参数-它

  • 问题内容: Jackson with Jersey是否支持JSON上的多态类? 比方说,例如,我有一个Parent类和一个从其继承的Child类。而且,假设我要使用JSON通过HTTP发送和接收父级和子级。 我考虑过这种实现: 问题:如果我(当然通过JSON)给此函数一个Child对象,它将起作用吗?Child的多余成员字段也将被序列化吗?基本上,我想知道这些框架是否支持多态消费和响应。 顺便说一

  • 我有三个从超级类(SensorData)继承的类 我想根据参数将一个json输入转换为其中一个类。我正在尝试使用Jackson StdDeserializer并创建一个自定义的反序列化程序 我的问题是,当我确定映射具体类的正确类型时,映射器再次调用自定义stdDeserializer。所以我需要一种方法来打破循环当我有正确的类型。stacktrace是下一个 输入示例 我只包含stacktrace

  • 我使用@JsonTypeInfo和@JsonSubTypes来映射基于给定属性的解析子类。下面是我想要解析的示例JSON的一个人为示例。 用这个作为课堂 但是,当JSON包含我想要忽略的类型时,就会出现问题。例如,如果我有一个新类型的“猪”,我真的不想反序列化为对象: 并尝试解析它,它会给我这个错误: 无法将类型id猪解析为[简单类型,类动物]的子类型 我如何修复它,这样我就可以只绘制那些“狗”和

  • 我想为我们的REST API实现一个自定义的反序列化器,它不仅被Java应用程序使用。因此,我不想让Jackson将类型信息放入序列化的JSON中。 我目前正在努力反序列化<code>CollectionExpand</code>,因为它包含特定<code>ResourceModel</code>的<code>数据</code>列表。 < code>ResourceModel是一个接口,每个< c