使用Jackson进行反序列化时,获取NPE读取空对象字段

时间:2017-03-22 22:19:15

标签: java json serialization jackson deserialization

我有一个基类A和2个子类B和C扩展A. A是一个抽象类。 A是另一个类中的一个字段,如:

@JsonTypeInfo({
  use = JsonTypeInfo.Id.NAME, 
  include = JsonTypeInfo.As.PROPERTY,
  property= "type"
})
@JsonSubTypes({
  @JsonSubTypes.Type(value = B.class, name = "b"),
  @JsonSubTypes.Type(value = C.class, name = "c")
})
public abstract class A {

}

public class B extends A {
    @JsonCreator
    ...
}

public class C extends A {
    @JsonCreator
    ...
}

public class MyClass {
    private A a;
}

我想序列化和反序列化MyClass。虽然MyClass中的字段A可以为null,但我不想在序列化期间跳过A,即使它是null。然后,当我尝试反序列化json String时,我得到了NPE。我认为这是因为Json String没有mapper的“类型”来查找子类型。有办法解决这个问题吗?

1 个答案:

答案 0 :(得分:-2)

实际上这对杰克逊来说很好。 NPE是由我自己的构造函数抛出的。