java - Spring Boot JPA多对多杰克逊,序列化每个实体
问题描述
我有两个实体,用户和角色;他们有多对多的关系。
@Entity
@Data
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private UUID id;
@Column(name = "username")
private String username;
@Column(name = "password")
private String password;
@Column(name = "email")
private String email;
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "users_roles", joinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(name = "role_id", referencedColumnName = "id"))
private Collection<Role> roles;
}
@Entity
@Data
@Table(name = "roles")
public class Role {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private UUID id;
@Column(name = "name")
private String name;
@ManyToMany(mappedBy = "roles")
private List<User> users;
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "roles_authorities", joinColumns = @JoinColumn(name = "role_id", referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(name = "authority_id", referencedColumnName = "id"))
private Collection<Authority> authorities;
}
我想将两个实体序列化为 JSON,这样当我要获取用户时,我可以看到他们的角色,但角色对象本身不应该有用户集合
[
{
id: "624a174b-0a9e-49be-9116-2b0b2aee4014",
username: "admin",
password: "$2a$12$Neo1AdkqDWa2fTeLsAn7T.t9S4/70zDE7Ab2sCPVJ9wy18qNdESpW",
email: "admin@gmail.com",
roles: [
{
id: "613bb9f1-1607-4f8d-8cd2-f08217d60829",
name: "ROLE_USER",
},
{
id: "8ed0f60b-71e5-427f-a485-7bdec5a64768",
name: "ROLE_ADMIN",
},
],
},
{
id: "1825d4f7-d655-4b7e-aefb-e9e82d316c59",
username: "string",
password: "$2a$10$C.lyzjlv/d5CpsZw.5IxUOD08UzhCjOzeOfcsPC.Ua.SHvvej6SV2",
email: "string@mail.ci",
roles: [
{
id: "613bb9f1-1607-4f8d-8cd2-f08217d60829",
name: "ROLE_USER",
},
],
},
];
所以对于角色
[
{
id: "613bb9f1-1607-4f8d-8cd2-f08217d60829",
name: "ROLE_USER",
users: [
{
id: "624a174b-0a9e-49be-9116-2b0b2aee4014",
username: "admin",
password: "$2a$12$Neo1AdkqDWa2fTeLsAn7T.t9S4/70zDE7Ab2sCPVJ9wy18qNdESpW",
email: "admin@gmail.com",
},
{
id: "1825d4f7-d655-4b7e-aefb-e9e82d316c59",
username: "string",
password: "$2a$10$C.lyzjlv/d5CpsZw.5IxUOD08UzhCjOzeOfcsPC.Ua.SHvvej6SV2",
email: "string@mail.ci",
},
],
},
{
id: "8ed0f60b-71e5-427f-a485-7bdec5a64768",
name: "ROLE_ADMIN",
users: [
{
id: "624a174b-0a9e-49be-9116-2b0b2aee4014",
username: "admin",
password: "$2a$12$Neo1AdkqDWa2fTeLsAn7T.t9S4/70zDE7Ab2sCPVJ9wy18qNdESpW",
email: "admin@gmail.com",
},
],
},
];
现在我可以通过将@JsonIgnore 添加到用户类中的角色集合或角色类中的用户集合来部分实现这一点
我正在寻找类似条件@JsonIgnore 的东西,这样我就可以在相应的 REST 控制器上添加适当的注释
我怎样才能做到这一点?
解决方案
@JsonIgnoreProperties
您可以使用注释标记所有您不希望它被解析的属性
请在此处查看我的帖子,它应该包含对您的问题的指导,但是它没有GSON
使用Jackson
推荐阅读
- node.js - 有时 node-rdkafka 消费者没有从主题中读取任何消息
- tfs - 如何在 TFS 2018.3(本地)中自定义迭代板上的列
- django - Django 使用 FilterSet 过滤布尔值
- c++ - 如何在字节类型数组中分配数据
- symfony - 如何覆盖 RedisAdapter 中的命名空间参数以使 Symfony4 应用程序缓存
- python - FileNotFoundError: [Errno 2] pydub 中没有这样的文件或目录
- python-3.x - 我的 psql 查询的等效 sqlalchemy ORM 是什么?
- python-3.7 - 我在 odoo13 中遇到错误我设置了新的 odooo 我正在尝试安装新的自定义模块
- .net - what's the origin of "400 Bad Request Error " error?
- python - 在 Pyspark Shell 中访问用户定义的模块(ModuleNotFoundError: No module named)