Java Jackson反序列化不受我控制的多态类型

Java Jackson反序列化不受我控制的多态类型,java,jackson,polymorphism,unmarshalling,Java,Jackson,Polymorphism,Unmarshalling,我想(取消)封送包含字段的对象。虽然序列化工作正常,但我无法对其进行反序列化。 实现类不在我的控制之下。我想一般来说,由于缺少构造函数和/或设置器,不可能反序列化到原始实现类 另一方面,我希望保存json中包含的所有信息(作为java对象) 我有什么办法可以实现这一点,有没有最佳或良好的做法?您可以使用Jackson Mixins在相关类/字段上伪造@JsonDeserialize(使用=CostumDeserializer.class)注释。 然后您可以尝试自己在给定的反序列化器类中创建实例

我想(取消)封送包含字段的对象。虽然序列化工作正常,但我无法对其进行反序列化。 实现类不在我的控制之下。我想一般来说,由于缺少构造函数和/或设置器,不可能反序列化到原始实现类

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


我有什么办法可以实现这一点,有没有最佳或良好的做法?

您可以使用Jackson Mixins在相关类/字段上伪造
@JsonDeserialize(使用=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: