尝试在Java中将列表从数据库转换为json时发生堆栈溢出

尝试在Java中将列表从数据库转换为json时发生堆栈溢出,java,json,hibernate,jpa,orm,Java,Json,Hibernate,Jpa,Orm,我有个问题。这里是我的实体用户和用户角色 用户 package com.springapp.model; import javax.persistence.*; import java.util.HashSet; import java.util.Set; @Entity @Table(name = "users", catalog = "users") public class User { private String username; private String password

我有个问题。这里是我的实体用户和用户角色

用户

package com.springapp.model;

import javax.persistence.*;
import java.util.HashSet;
import java.util.Set;

@Entity
@Table(name = "users", catalog = "users")
public class User {

private String username;
private String password;
private boolean enabled;
private String email;


private String token;
private Set<UserRole> userRole = new HashSet<UserRole>(0);

public User() {
    this.enabled=false;
}

@Column(name = "token",
        nullable = false, length = 80)
public String getToken() {
    return this.token;
}

public void setToken(String token) {
    this.token = token;
}

public String getEmail() {
    return this.email;
}
@Column(name = "email",
        nullable = false, length = 80)
public void setEmail(String email) {
    this.email = email;
}

@Id
@Column(name = "username", unique = true,
        nullable = false, length = 45)
public String getUsername() {
    return this.username;
}

public void setUsername(String username) {
    this.username = username;
}

@Column(name = "password",
        nullable = false, length = 60)
public String getPassword() {
    return this.password;
}

public void setPassword(String password) {
    this.password = password;
}

@Column(name = "enabled", nullable = false)
public boolean isEnabled() {
    return this.enabled;
}

public void setEnabled(boolean enabled) {
    this.enabled = enabled;
}

@OneToMany(fetch = FetchType.EAGER, mappedBy = "user")
public Set<UserRole> getUserRole() {
    return this.userRole;
}

public void setUserRole(Set<UserRole> userRole) {
    this.userRole = userRole;
}

}
现在,我想使用gson-lib将具有角色列表的用户列表获取到json

 List<User> users = userService.showAllUsers();
 Gson gson = new Gson();
 return  gson.toJson(users);
List users=userService.showAllUsers();
Gson Gson=新的Gson();
返回gson.toJson(用户);

但它失败了,出现stackoverflow错误。我认为这是因为每个用户都指角色,角色指用户(因为我们在Userroles中有user-user,在users中有一组角色)。它变成了“递归”。如何避免此错误?

当双向关联和JSon不忽略一侧时会发生此错误

您需要用
@JsonIgnore
标记多对一面:

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "username", nullable = false)
@JsonIgnore
public User getUser() {
    return this.user;
}
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "username", nullable = false)
@JsonIgnore
public User getUser() {
    return this.user;
}