Spring 在给定JSON ID的POJO中映射对象属性
首先,对不起,我无法更好地解释我自己 我正在编写一个示例API,我有一个名为Movie的POJO(带有JPA),所以在我的控制器中,我想给它一个JSON来插入一部电影 电影有一个Spring 在给定JSON ID的POJO中映射对象属性,spring,jpa,jackson,Spring,Jpa,Jackson,首先,对不起,我无法更好地解释我自己 我正在编写一个示例API,我有一个名为Movie的POJO(带有JPA),所以在我的控制器中,我想给它一个JSON来插入一部电影 电影有一个@ManyToOne(optional=false)属性,与另一个名为Genre的POJO相关(idGenre,Name) 我想在JSON中给出一个id,而不是每个属性都有一个对象,因此: 控制器 @RequestMapping(value = "/sendMovie", method = RequestMethod.P
@ManyToOne(optional=false)
属性,与另一个名为Genre
的POJO相关(idGenre
,Name
)
我想在JSON中给出一个id,而不是每个属性都有一个对象,因此:
控制器
@RequestMapping(value = "/sendMovie", method = RequestMethod.POST)
public void setMovie(@RequestBody Movie movie) {
mRepo.save(movie);
}
电影
@Entity
public class Movie {
@Id
@Column(name = "ID_MOVIE", nullable = false)
@GeneratedValue(strategy = GenerationType.AUTO)
private Long idMovie;
@Column(name = "NAME")
private String name;
@Column(name = "SYNOPSIS")
private String synopsis;
@Column(name = "POSTER")
private String poster;
@Column(name = "DIRECTOR")
private String director;
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "idGenre")
@JsonIdentityReference(alwaysAsId = true)
@ManyToOne(optional = false)
@JoinColumn(name = "ID_GENRE", referencedColumnName = "ID_GENRE")
private Genre genre;
{
"name": "MATRIX",
"idGenre": 3,
"synopsis": "NEO DOING THINGS",
"poster": "matrix.jpg",
"director": "WACHOWSKIS"
}
我想使用的JSON
@Entity
public class Movie {
@Id
@Column(name = "ID_MOVIE", nullable = false)
@GeneratedValue(strategy = GenerationType.AUTO)
private Long idMovie;
@Column(name = "NAME")
private String name;
@Column(name = "SYNOPSIS")
private String synopsis;
@Column(name = "POSTER")
private String poster;
@Column(name = "DIRECTOR")
private String director;
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "idGenre")
@JsonIdentityReference(alwaysAsId = true)
@ManyToOne(optional = false)
@JoinColumn(name = "ID_GENRE", referencedColumnName = "ID_GENRE")
private Genre genre;
{
"name": "MATRIX",
"idGenre": 3,
"synopsis": "NEO DOING THINGS",
"poster": "matrix.jpg",
"director": "WACHOWSKIS"
}
有可能实现吗?您确实将
JsonIdentity…
注释放错了位置
您需要在@Genre
类中添加以下注释:
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "idGenre")
@JsonIdentityReference(alwaysAsId = true)
public class Genre {
@Id
@Column(...)
private Long idGenre;
//....
}
并从电影
类中的属性流派
中删除这些注释。
你还需要告诉Jackson你想要这个属性
使用名称“idGenre”
序列化
然后JSON输出将如下所示:
{
"name": "MATRIX",
"synopsis": "NEO DOING THINGS",
"poster": "matrix.jpg",
"director": "WACHOWSKIS",
"idGenre": 3
}
您确实将
JsonIdentity…
注释放错了位置
您需要在@Genre
类中添加以下注释:
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "idGenre")
@JsonIdentityReference(alwaysAsId = true)
public class Genre {
@Id
@Column(...)
private Long idGenre;
//....
}
并从电影
类中的属性流派
中删除这些注释。
你还需要告诉Jackson你想要这个属性
使用名称“idGenre”
序列化
然后JSON输出将如下所示:
{
"name": "MATRIX",
"synopsis": "NEO DOING THINGS",
"poster": "matrix.jpg",
"director": "WACHOWSKIS",
"idGenre": 3
}
当然设计一个与您想要发送和接收的JSON相匹配的类,与Movie类不同,我们称之为MovieCreationCommand。当您在控制器中收到MovieCreationCommand时,创建一部电影,通过从命令中获取其所有属性来初始化其属性,并使用命令中找到的流派ID从数据库中获取流派,然后插入该电影。确定。设计一个与您想要发送和接收的JSON相匹配的类,与Movie类不同,我们称之为MovieCreationCommand。当您在控制器中收到MovieCreationCommand时,创建一个电影,通过从命令中获取其所有属性来初始化其属性,并使用命令中找到的流派ID从数据库中获取流派,然后插入该电影。非常感谢您,Thomas,但我想将该JSON作为输入,将新电影添加到DB中,当我使用这个
com.fasterxml.jackson.databind.desr.UnsolvedForwardReference:UnsolvedForwardReference时,我得到了一个JSON解析错误:
非常感谢,Thomas,但我想把这个JSON作为输入,将一部新电影添加到DB中,使用此com.fasterxml.jackson.databind.desr.UnsolvedForwardReference:UnsolvedForwardReference for: