使用Jackson ObjectIdGenerator将Json转换为集合的问题

问题描述 投票:0回答:1

我正在尝试将以下JSON转换为Java中的集合

"films" : [
        {
            "fid" : 1, 
            "title" : "The Platform", 
            "year": 2019, 
            "genre": [1,2,3], 
            "director": 1, 
            "cast": [2,3,4] , 
            "description": "A vertical prison with one cell per level. Two people per cell. One only food platform and two minutes per day to feed from up to down. An endless nightmare trapped in The Hole."
        }
],

"tvseries" : [
        {
            "tid" : 1, 
            "title" : "Breaking Bad", 
            "year": 2008, 
            "genre": [9,5,3],
            "creator": 13, 
            "cast": [14,15,16] , 
            "description": " A high school chemistry teacher diagnosed with inoperable lung cancer turns to manufacturing and selling methamphetamine in order to secure his family's future."
        }
],
"people" : [
        { "pid": 1, "name" : "Galder Gaztelu-Urrutia" }
],

 "genres" : [
        { "gid": 1, "genre": "Horror" }
]

以上只是一些数据的示例。我的特殊问题是Film类,特别是以下错误:“问题反序列化属性'director'(预期类型:[简单类型,类Assignment4.model.Person];实际类型:assignment4.model.Film)“

这是我的电影和人的班级结构:

public abstract class Media {
private String title;
private int year;
private String description;
private ArrayList<Genre> genre = new ArrayList<Genre>();
private ArrayList<Person> cast = new ArrayList<Person>();
}

@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "fid")
public class Film extends Media {
    private int fid;
    private Person director;

    @Override
    public int hashCode() {
        return Arrays.hashCode(new Object[] { getFid(),  getTitle() });
    }

@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "pid")
public class Person {
private int pid;
private String name;

@Override
public int hashCode() {
    return Arrays.hashCode(new Object[] { getPid(),  getName() });
}

public class Collection {

    private Set<Film> films = new TreeSet<Film>();
    private Set<Genre> genres = new TreeSet<Genre>();
    private Set<Person> people = new TreeSet<Person>();
    private Set<Profile> profiles = new TreeSet<Profile>();
    private Set<TV> tvseries = new TreeSet<TV>();
}

所有类都有各种属性的getter和setter方法。我已经尽力想想,但无法弄清楚为什么它无法获得这部电影的导演。

java json jackson jackson-databind
1个回答
0
投票

您应该在POJO scope批注中设置@JsonIdentityInfo属性:

@JsonIdentityInfo(
    generator = ObjectIdGenerators.PropertyGenerator.class, 
    property = "pid", scope = Person.class)
public class Person {
    private int pid;
    private String name;
// getters/setters/hashcode, etc. ...
}

@JsonIdentityInfo(
    generator = ObjectIdGenerators.PropertyGenerator.class, 
    property = "gid", scope = Genre.class
)
public class Genre {
    private int gid;
    private String genre;
// getters/setters/hashcode, etc. ...
}

@JsonIdentityInfo(
    generator = ObjectIdGenerators.PropertyGenerator.class, 
    property = "fid", scope = Film.class
)
public class Film extends Media {
    private int fid;
    private String title;
    private Person director;
// getters/setters/hashcode, etc. ...
}
© www.soinside.com 2019 - 2024. All rights reserved.