首页 > 解决方案 > 杰克逊在@ManyToMany 关系中的序列化问题

问题描述

我有以下情况:

//--class user --
private ....

@OneToMany(targetEntity = UserRoles.class, mappedBy = "iduser", fetch = FetchType.LAZY)
@JsonManagedReference
private List<UserRoles> userRoleList = new ArrayList<>();

@OneToOne(targetEntity = Login.class, cascade = CascadeType.ALL)
@JoinColumn(name = "iduser", referencedColumnName = "iduser")
@JsonManagedReference
private Login login;

@ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinTable(name = "n_gruppi_user", joinColumns = { @JoinColumn(name = "iduser") }, inverseJoinColumns = {
        @JoinColumn(name = "idgruppo") })
@JsonManagedReference
List<Gruppi> groups = new ArrayList();

下一堂课

@Entity
@Table(name = "gruppi")
@EntityListeners(AuditingEntityListener.class)

@Data
public class Gruppi implements Serializable {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long idgruppo;
private long iduser;
private String tipo;
private String nome_gruppo;
private String pass_gruppo;
private String email_gruppo;
private String descr_gruppo;
private Timestamp data_creazione;


@ManyToMany(mappedBy = "groups")
@JsonBackReference
List<User> users_group = new ArrayList<>();

当我运行应用程序时,一切正常,我得到 在此处输入图像描述 当我序列化我的对象用户时,杰克逊序列化除 users_group 之外的所有内容,那是因为我正在使用@JsonBackReference。但是如果不使用@JsonBackReference 循环问题就会出现。我怎样才能得到 users_group 序列化呢?我需要它!

标签: jsonspring-bootserializationjackson

解决方案


对于这两个类,您应该已经定义了一些ID属性,我们可以使用它来识别数据库中的对象。我们可以使用它来帮助Jackson识别运行时的实例。您可以删除@JsonBackReference@JsonManagedReference改为使用com.fasterxml.jackson.annotation.JsonIdentityInfo注释:

@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class,
        property = "iduser")
class User {
...
}

@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class,
        property = "idgruppo")
class Gruppi {
...
}

推荐阅读