
[英]how to map json object having unlimited property to pojo or in @RequestBody variable in controller
[英]Map an Object Property in a POJO given an ID from a JSON
首先,对不起,我无法更好地解释自己。
我正在编写一个示例API,我有一个名为Movie的POJO(使用JPA),因此在我的控制器中,我想给它一个JSON以插入Movie。
电影具有@ManyToOne(optional = false)
属性,该属性与另一个名为Genre
( idGenre
, Name
)的POJO相关。
我想提供一个不是具有所有属性的对象,而是一个id的JSON,所以:
控制器
@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"
}
有可能实现这一目标吗?
您确实将JsonIdentity...
批注放置在错误的位置。
您需要将这些注释放在@Genre
类上:
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "idGenre")
@JsonIdentityReference(alwaysAsId = true)
public class Genre {
@Id
@Column(...)
private Long idGenre;
//....
}
并从Movie
类的属性Genre genre
中删除这些注释。 您还需要使用@JsonProperty("idGenre")
告诉Jackson,您希望将此属性序列化为名称"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
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.