杰克逊反序列化不受我控制的多态类型

时间:2017-01-16 10:57:13

标签: java jackson polymorphism unmarshalling

我想(联合国)封送包含this type字段的对象。虽然序列化运行良好,但我无法对其进行反序列化。 实施班不在我的控制之下。我猜通常由于缺少构造函数和/或setter而无法反序列化到原始实现类。

另一方面,我想保存json中包含的所有信息(作为java对象)。

我有什么选择来实现这一目标,有最佳或良好的做法吗?

1 个答案:

答案 0 :(得分:1)

您可以使用Jackson Mixins伪造有关类/字段的@JsonDeserialize(using=CostumDeserializer.class)注释。 然后,您可以尝试在给定的反序列化器类中自己创建实例。

// I'm not sure whether annotations (@JsonTypeInfo) on class level are supported as well to allow the polymorphistic type decision.
abstract class MixIn {

  // make constructor usable if available
  MixIn(@JsonProperty("id") int a, @JsonProperty("name") String b) { }

  @JsonDeserialize(using=CostumDeserializer.class) abstract TypeX getTypeX();

}

然后你可以像这样使用它

objectMapper.addMixIn(TypeXContainer.class, MixIn.class);

Doks:http://wiki.fasterxml.com/JacksonMixInAnnotations