如何解决杰克逊的序列化问题只有同一实体的第一个对象可以很好地序列化
我开发了一个REST投票系统,用户可以在该系统上对餐厅进行投票。我有一个投票类,其中包含用户,餐厅和日期。
public class Vote extends AbstractBaseEntity {
@NotNull
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id")
private User user;
@NotNull
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "restaurant_id")
private Restaurant restaurant;
@Column(name = "date",nullable = false)
@NotNull
private LocalDate date;
}
我需要找到当天的所有选票。如果一个餐厅有几张票,则只有第一个对象能很好地序列化。另一个显示餐厅ID而不是餐厅对象,如下所示:
[
{
"id": 100019,"user": null,"restaurant": {
"id": 100004,"name": "KFC"
},"date": "2020-08-28"
},{
"id": 100020,"restaurant": 100004,{
"id": 100021,"restaurant": {
"id": 100005,"name": "Burger King"
},{
"id": 100022,"restaurant": 100005,"date": "2020-08-28"
}
]
因此,肯德基的第一个投票显示完整的餐厅信息,而第二个仅显示ID。汉堡王也一样,接下来的2票。
可能是个问题吗?
解决方法
您需要使用com.fasterxml.jackson.annotation.JsonIdentityInfo
批注并为Restaurant
类声明它:
@JsonIdentityInfo(generator = ObjectIdGenerators.None.class)
class Restaurant {
private int id;
...
}
另请参阅:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。