java - 类关系问题在 JSON 中不返回某些数据
问题描述
我需要将此 Json 返回到我的项目:
{
"data": {
"id": 1,
"username": "renato",
"name": "Renato",
"email": "asdasd@outlook.com",
"roles": [
{
"id": 1,
"name": "ROLE_USER",
"accessList": [
{
"id_access": 1,
"id_role": {
"id_role": 1,
"name": "ROLE_USER",
"authority": "ROLE_USER"
},
"id_program": {
"id_program": 1,
"code_program": "TEST",
"name": "test"
},
"id_view": {
"id_view": 1,
"code_view": "TEST",
"name": "test"
},
"menuYesNo": true,
"accessYesNo": true,
"saveYesNo": true,
"editYesNo": true,
"deleteYesNo": true
}
]
}
]
}
}
但它返回这个:
{
"data": {
"id": 1,
"username": "renato",
"name": "Renato",
"email": "asdasd@outlook.com",
"roles": [
{
"id": 1,
"name": "ROLE_USER",
"accessList": [
{
"id_access": 1,
"id_role": {
"id_role": 1,
"name": "ROLE_USER",
"authority": "ROLE_USER"
},
"id_program": {},
"id_view": {},
"menuYesNo": true,
"accessYesNo": true,
"saveYesNo": true,
"editYesNo": true,
"deleteYesNo": true
}
]
}
]
}
}
只有类 AccessModel 和 RoleModel 有双向关系,ProgramModel 和 ViewModel 与 AccessModel 之间存在单向关系。
OBS:我使用 ModelMapper 将 UserModel 映射到 UserDTO。在 UserDTO 中存在 RoleModel。RoleModel 和 AccessModel 分别有一个 @JsonManagedReference 和 @JsonBackReference,但 ProgramModel 和 ViewModel 没有。
@Data
@Entity
@Table(schema = "`SCH`", name = "`USER`")
public class UserModel implements UserDetails {
private static final long serialVersionUID = -2195101536379303067L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(table = "USER", name="`ID_USER`", nullable = true)
private Long id_user;
@Column(table = "USER", name="`USERNAME`", nullable = true, length = 50)
private String username;
@Column(table = "USER", name="`PASSWORD`", nullable = true, length = 255)
private String password;
@Column(table = "USER", name="`NAME`", length = 255)
private String name;
@Column(table = "USER", name="`EMAIL`", length = 255)
private String email;
@Column(table = "USER", name="`DATE_EXPERED`", nullable = true)
private LocalDate dateExpered;
@Column(table = "USER", name="`ACCOUNT_ACTIVE`", nullable = true)
private Boolean accountAtive;
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(schema = "`SCH`", name = "`USER_ROLE`" ,
joinColumns = @JoinColumn(
name = "`CD_USER`", referencedColumnName ="`ID_USER`"
),
inverseJoinColumns = @JoinColumn(
name = "`CD_ROLE`", referencedColumnName = "`ID_ROLE`"
))
@JsonBackReference
private Collection<RoleModel> roles;
//METHODS USERDETAILS
}
@Data
@Entity
@Table(schema = "`SCH`", name = "`ROLE`")
public class RoleModel implements GrantedAuthority {
private static final long serialVersionUID = -1320143054659054908L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(table = "ROLE", name = "`ID_ROLE`", nullable = true)
private Long id_role;
@Column(table = "ROLE", name = "`NAME`", nullable = true, length = 255)
private String name;
@JsonBackReference
@OneToMany(cascade = CascadeType.ALL, mappedBy = "id_role", fetch = FetchType.LAZY)
private List<AccessModel> accessList;
}
@Data
@Entity
@Table(schema = "`SCH`", name = "`ACCESS`")
public class AccessModel implements Serializable {
private static final long serialVersionUID = -5590889002302223720L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(table = "ACCESS", name = "`ID_ACCESS`", nullable = true)
private Long id_access;
@ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name = "`CD_ROLE`")
@JsonManagedReference
private RoleModel id_role;
@ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name = "`CD_PROGRAM`")
private ProgramModel id_program;
@ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name = "`CD_VIEW`")
private ViewModel id_view;
@Column(table = "ACCESS", name = "`MENU_YES_NO`", nullable = true)
private Boolean menuYesNo;
@Column(table = "ACCESS", name = "`ACCESS_YES_NO`", nullable = true)
private Boolean accessYesNo;
@Column(table = "ACCESS", name = "`SAVE_YES_NO`", nullable = true)
private Boolean saveYesNo;
@Column(table = "ACCESS", name = "`EDIT_YES_NO`", nullable = true)
private Boolean editYesNo;
@Column(table = "ACCESS", name = "`DELETE_YES_NO`", nullable = true)
private Boolean deleteYesNo;
}
@Entity
@Table(name = "`PROGRAM`", schema = "`SCH`")
public class ProgramModel implements Serializable {
private static final long serialVersionUID = -726159076909575803L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(table = "PROGRAM", name = "`ID_PROGRAM`", nullable = true)
private Long id_program;
@Column(table = "PROGRAM", name = "`CODE_PROGRAM`", nullable = true)
private String code_program;
@Column(table = "PROGRAM", name = "`NAME`", nullable = true)
private String name;
@Column(table = "PROGRAM", name = "`ACTIVE`", nullable = true)
private Boolean active;
}
@Entity
@Table(name = "`VIEW`", schema = "`SCH`")
public class ViewModel implements Serializable {
private static final long serialVersionUID = 3900486010030569933L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(table = "VIEW", name = "`ID_VIEW`", nullable = true)
private Long id_view;
@Column(table = "VIEW", name = "`CODE_VIEW`", nullable = true)
private String code_view;
@Column(table = "VIEW", name = "`NAME`", nullable = true)
private String name;
@Column(table = "VIEW", name = "`ACTIVE`", nullable = true)
private Boolean active;
}
解决方案
我忘记放入@Data
ProgramModel 和 ViewModel。
推荐阅读
- django - 在 Django Oscar 中使用单元测试调用视图访问购物篮
- r - 在 R 中将欧洲数字格式转换为美国数字格式
- python-3.x - 如何从 python 3.6.5 中找到确切的错误行?
- python-3.x - 为什么在使用 pip 安装软件包时出现无效语法错误
- angular - 为什么不应该在 Angular 组件的构造函数中进行数据初始化?
- numbers - 从数论中寻找原根的算法
- sql - 在 sql 表条目中查找重复单词
- javascript - 从表中删除行时如何更改计算
- android - Android中的平滑擦洗视频
- vba - 表单字段上的 MS Access VBA 代码具有多个 If 以根据输入的值阻止/允许输入