【发布时间】:2018-11-14 17:29:09
【问题描述】:
首先,抱歉,我无法更好地解释自己。
我正在编写一个示例 API,我有一个名为 Movie 的 POJO(带有 JPA),所以在我的控制器中,我想给它一个 JSON 来插入电影。
Movie 有一个 @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;
我想使用的 JSON
{
"name": "MATRIX",
"idGenre": 3,
"synopsis": "NEO DOING THINGS",
"poster": "matrix.jpg",
"director": "WACHOWSKIS"
}
有没有可能做到这一点?
【问题讨论】:
-
当然。设计一个与你要发送和接收的 JSON 匹配的类,与 Movie 类不同,我们称之为 MovieCreationCommand。当您在控制器中收到 MovieCreationCommand 时,创建一个 Movie,通过将其从命令中取出来初始化其所有属性,并使用在命令中找到的流派 ID 从数据库中获取流派,然后插入该电影。