我正在尝试将以下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方法。我已经尽力想想,但无法弄清楚为什么它无法获得这部电影的导演。
您应该在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. ...
}