首先,对不起,我无法更好地解释自己。
我正在编写一个示例API,我有一个名为Movie的POJO(使用JPA),因此在我的控制器中,我想给它一个JSON来插入Movie。
电影具有@ManyToOne(optional = false)
属性,与另一个名为Genre
(idGenre
,Name
)的POJO相关
我想提供一个不是带有所有属性的对象,而是一个id的JSON,所以:
CONTROLLER
@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"
}
是否有可能实现这一目标?
答案 0 :(得分:2)
您确实将JsonIdentity...
批注放在错误的位置。
您需要将这些注释放在您的@Genre
类上:
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "idGenre")
@JsonIdentityReference(alwaysAsId = true)
public class Genre {
@Id
@Column(...)
private Long idGenre;
//....
}
,然后从您的Genre genre
类的属性Movie
中删除这些注释。
您还需要用@JsonProperty("idGenre")
告诉杰克逊您想要此属性
以名称"idGenre"
序列化。
@ManyToOne(optional = false)
@JoinColumn(name = "ID_GENRE", referencedColumnName = "ID_GENRE")
@JsonProperty("idGenre")
private Genre genre;
然后JSON输出将如下所示:
{
"name": "MATRIX",
"synopsis": "NEO DOING THINGS",
"poster": "matrix.jpg",
"director": "WACHOWSKIS",
"idGenre": 3
}