我有一个问题。这里是我的实体用户和用户角色
用户
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;
}
}
用户角色
package com.springapp.model;
import javax.persistence.*;
import static javax.persistence.GenerationType.IDENTITY;
@Entity
@Table(name = "user_roles", uniqueConstraints = @UniqueConstraint(
columnNames = { "role", "username" }))
public class UserRole{
private Integer userRoleId;
private User user;
private String role;
public UserRole() {
}
public UserRole(User user, String role) {
this.user = user;
this.role = role;
}
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "user_role_id",
unique = true, nullable = false)
public Integer getUserRoleId() {
return this.userRoleId;
}
public void setUserRoleId(Integer userRoleId) {
this.userRoleId = userRoleId;
}
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "username", nullable = false)
public User getUser() {
return this.user;
}
public void setUser(User user) {
this.user = user;
}
@Column(name = "role", nullable = false, length = 45)
public String getRole() {
return this.role;
}
public void setRole(String role) {
this.role = role;
}
}
现在我想使用 gson lib 获取用户列表及其角色列表到 json
List<User> users = userService.showAllUsers();
Gson gson = new Gson();
return gson.toJson(users);
但它因计算器错误而失败。我认为这是因为每个用户指的是角色,而角色指的是用户(因为我们在 Userroles 中有 User 用户,在用户中有 Set of roles)。它变成了“递归”。我怎样才能避免这个错误?
最佳答案
当您进行双向关联并且 JSon 不忽略一侧时,就会发生这种情况。
你需要用@JsonIgnore
标记多对一的一面:
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "username", nullable = false)
@JsonIgnore
public User getUser() {
return this.user;
}
关于java - 尝试在 Java 中将 List 从数据库转换为 json 时的 Stackoverflow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31697256/