首页 > 解决方案 > 为什么杰克逊将超类序列化为单独的对象?

问题描述

假设我有以下 Cassandra 实体。

@Entity
class Person {
    private String name;
    // getter and setter
}

@Entity
class Job {
    private String title;
    // getter and setter
}

class PersonWrapper extends Person {
    private Job job; 
    // getter and setter
}

API 提供:

{
    "name": "rick",
    "job": {
        "title": "programmer"
    },
    "person": {
        "name": "rick",
        "job": {
            "title": "programmer"
        }
    }
}

我的临时解决方案是在包装类上使用JsonIgnoreProperties 。有没有办法消除重复对象?

标签: javaspringjackson

解决方案


Jackson 将 JSON 的字段映射到 Java 对象中的相等字段,方法是匹配 JSON 字段的名称和您的类中没有“get”和“set”的字段(您的序列化类中必须有 getter 和 setter)。在您的示例中,您需要创建这样的类:

@Getter
@Setter
class CommonClass {
    String name;
    Job job; 
    Person person;
}
@Getter
@Setter
class Job {
    String title;
}
@Getter
@Setter
class Person {
    String name;
    Job job; 
}

推荐阅读