首页 > 解决方案 > 杰克逊总是试图实例化一个抽象基类

问题描述

我正在尝试使用 Jackson 和@JsonTypeInfo.

我有以下类,但杰克逊总是试图实例化抽象基类通信,因此失败。

public class PartnerCommunication {
    private String addressType;

    @Embedded
    @JsonTypeInfo(
            use=JsonTypeInfo.Id.NAME,
            include= JsonTypeInfo.As.EXTERNAL_PROPERTY,
            property="addressType"
    )
    @JsonSubTypes({
            @JsonSubTypes.Type(value=Address.class, name="Address"),
            @JsonSubTypes.Type(value=Telephone.class, name="Telephone")
    })
    private Communication communication;
}
public abstract class Communication {
}
public class Telephone extends Communication {
     private String phone;
}
public class Address extends Communication {
     private String street;
}

我试图反序列化的 json 看起来像这样。

{
    "addressType": "Address",
    "communication": {
        "street": "My street"
    }
}

如果我拼错了类型,Jackson 会返回一个错误,说唯一有效的类型是地址和电话。所以它确实理解了这个提示,但显然没有完全遵循它。我错过了一些配置吗?

标签: javajsonjacksonpolymorphism

解决方案


在我更新了我的 Spring Boot 设置后,它似乎工作了。我现在正在使用2.3.1.RELEASE初学者父母。


推荐阅读