java - Jackson 多态类型处理 - 属性被丢弃

标签 java json jackson

我有这个 JSON 模型类,

public class Response {

    @JsonTypeInfo(use= JsonTypeInfo.Id.NAME, include=JsonTypeInfo.As.PROPERTY, property="category")
    @JsonSubTypes({
            @Type(value = Series.class, name = "Series"),
            @Type(value = Movies.class, name = "Movies")})
    public static abstract class Asset {
        public String category;
        public String id;
    }

    public static class Series extends Asset {
        public String seriesName;
        public int seasonNumber;
    }

    public static class Movies extends Asset {
        public String movieName;
    }

    public Asset[] assets;
}

当我尝试反序列化以下 JSON 时,

{
    assets: [
        {
            "category": "Series",
            "id": "ID1",
            "seriesName": "SeriesName1",
            "seasonNumber": 1
        },
        {
            "category": "Movies",
            "id": "ID2",
            "movieName": "MovieName1"
        }
    ]
}

我看到所有属性都正确反序列化,除了 category 属性,它在两种 Assets 类型中都是 null

我做错了什么吗?或者这是预期的行为 - 用于推断子类型的属性在反序列化期间被丢弃?

最佳答案

你需要设置visible = true:

@JsonTypeInfo(
    use= JsonTypeInfo.Id.NAME,
    include=JsonTypeInfo.As.PROPERTY,
    property="category",
    visible = true
)

关于java - Jackson 多态类型处理 - 属性被丢弃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14717456/

相关文章:

java - Facebook OAuth redirect_uri 问题

jackson - 使用 jackson 忽略 JSON 对象上的未知字段

java - 如何使用 Jackson 或任何其他 api 反序列化对象数组?

java - Jackson 序列化包括子类的字段

java - 使用 Hibernate envers 获取完整实体

java - 使用 "array-contains"查询 Cloud Firestore 社交媒体结构

java - 为什么Map有loadFactor而List没有呢?

Python 访问嵌套的 JSON 数据

ios - Google Places API 解析特定位置的详细信息

java - 如何将原始 JSON 作为来自 Restful 服务的响应传递?