`

多对多双向关联,转json死循环问题

 
阅读更多

如有两个实体类 User 和Role 。两者是多对多的关系。

User

@Data
@Entity
@Table(name = "sys_user")
public class User {
    @Id
    @GeneratedValue
    @Column(name = "user_id")
    private Integer userId;
    @Column(name = "username")
    private String username;
    @ManyToMany(cascade = {CascadeType.ALL}, fetch = FetchType.LAZY)
    @JoinTable(
            name = "user_role",
            joinColumns = {@JoinColumn(name = "user_id")},
            inverseJoinColumns = {@JoinColumn(name = "role_id")}
    )
    private Set<Role> roles;
}

 

 

Role

@Data
@Entity
@Table(name = "sys_role")
public class Role {
    @Id
    @Column(name = "role_id")
    private Integer roleId;
    @Column(name = "role_name", unique = true)
    private String roleName;
    @ManyToMany(cascade = {CascadeType.ALL}, fetch = FetchType.LAZY, mappedBy = "roles")
    private Set<User> users;

 

此时如果我们查询所有的用户,并返回json时,就会出先json死循环问题。因为在json解析时,User对象中有Role,而Role对象中又有User。如此反复循环,就造成了死循环。

@RequestMapping("findAll")
@ResponseBody
public List<User> findAll(){
        List<User> users = repository.findAll();
       return users;
    }

 

 

解决方法

在User实体类中加入 @JsonIgnoreProperties 注解

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 
@Data
@Entity
@Table(name = "sys_user")
public class User {
    @Id
    @GeneratedValue
    @Column(name = "user_id")
    private Integer userId;
    @Column(name = "username")
    private String username;
    @JsonIgnoreProperties(value = { "users" })
    @ManyToMany(cascade = {CascadeType.ALL}, fetch = FetchType.LAZY)
    @JoinTable(
            name = "user_role",
            joinColumns = {@JoinColumn(name = "user_id")},
            inverseJoinColumns = {@JoinColumn(name = "role_id")}
    )
    private Set<Role> roles;
}

 

这样的话,你再序列化User对象时,

user.roles 这个对象中只有 user.roles[i].id 和  users.roles[i].name 而没有 user.roles.users!!!!

 

 

 

 

分享到:
评论

相关推荐

    json转换jsonschema

    在JavaScript开发中,有时我们需要将JSON对象转换为JSON Schema,以便对数据进行验证。这在处理用户输入、API交互或者存储复杂数据结构时非常有用。`jsonToSchema`项目可能就是一个工具或库,用于帮助开发者实现这个...

    json转对象 json转对象json转对象 json转对象 json转对象 json转对象

    json转对象json转对象json转对象json转对象json转对象json转对象json转对象json转对象json转对象json转对象json转对象json转对象json转对象json转对象json转对象json转对象json转对象json转对象json转对象json转对象...

    Arcpy循环转json格式.txt

    利用arcgis的arcpy函数库实现shp文件批量转为json

    json2.js 字符串转转json对象工具

    总的来说,json2.js是解决JSON处理兼容性问题的一个工具,它提供了一种安全且标准化的方式来在JavaScript中进行JSON字符串与对象之间的转换,尤其对于那些不支持原生JSON操作的老版本浏览器而言。

    C# 工具类 泛型转JSON(Newtonsoft.Json)

    C# 工具类 泛型转JSON 使用 Newtonsoft.Json 转换JSON

    unity 自动excel转json插件

    同时,了解JSON的语法和结构对有效利用这个插件也非常重要。总之,“unity 自动excel转json插件”是Unity开发过程中一个实用的辅助工具,帮助开发者简化数据管理,专注于游戏的创意和功能实现。

    word表格转json

    在IT行业中,数据转换是一项常见的任务,特别是在不同的应用...总之,“word表格转json”是一个涉及文件读取、数据解析、对象建模和序列化等多个环节的编程任务,理解这些知识点有助于提升C# WinForms应用开发的能力。

    批量转换json到java类工具

    将json转换为javebean的工具,封装jsonschema2pojo,用户可以修改配置文件json2Beans.json,然后运行Json2JavaBean2.bat直接生成对应类。 能够批量转换json为bean,直接拷贝到项目中使用。 提醒: 需要提前安装java...

    JSON死循环解决办法

    在使用Hibernate这样的ORM框架时,由于其懒加载机制,可能会遇到JSON序列化时的死循环问题。这是因为CGLIB动态代理生成的对象在序列化时会递归地尝试序列化所有关联的对象,如果对象之间存在循环引用,就会导致无限...

    将各种数据转换JSON格式

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,被广泛用于Web应用程序之间传输数据。它基于JavaScript的一个子集,具有易于人阅读和编写,同时也易于机器解析和生成的特点。在IT领域,将各种数据...

    JAVA-JSON工具转换类

    它可以方便地将一种类型的数据转换成另一种类型,比如将字符串转成整数,日期转成字符串等,这对于JSON数据处理的灵活性至关重要。 `JsonUtil.java`看起来是一个自定义的工具类,很可能包含了对`json-lib`和`...

    GRIB2 数据 转 JSON

    GRIB2文件由一系列消息组成,每个消息包含一个或多个要素,如温度、湿度、风速等。这些要素有各自的定义、单位和地理位置信息。GRIB2的复杂性在于它的多层编码和可扩展性,使得它可以包含多种预测模型和观测数据。 ...

    xls转json excel转json

    使用nodejs写的一键excel转json工具,,excel2003表使用时全选设置单元格格式为文本,另存为保存一下, 转换完的json为[[],[]]压缩格式和一个合并的json, 实际使用时需要app.js中的parseData转换单个json或者...

    xml文件转json

    xml转换为json的js库文件

    lua文本转成json文本

    lua json文件转换 数据编排 lua配置表转成 json配置表

    Excel转Json工具

    这时,我们就需要“Excel转Json工具”来解决这个问题。 “Excel转Json工具”正如其名,它是一种能够将Excel文件中的数据转换为JSON格式的软件或在线服务。这种工具通常包含以下核心功能: 1. **导入Excel文件**:...

    XML转JSON工具类

    XML转JSON工具类,支持多层XML嵌套解析转JSON,采用dom4j解析转JSON格式,多次线上环境使用

    java实现二维数组转json的方法示例

    - 分别将`blogItem`中的元素作为键值对添加到JSON对象中,使用`append`方法并格式化字符串,如`"postdate: '" + blogItem[0] + "'"`。 - 添加右花括号`}`,结束JSON对象。 - 更新`first`为`false`,表示不是第一...

    Bean转JSON

    支持Bean转JSON List&lt;&gt; 转JSON

    Revit模型转JSON数据测试数据(JSON数据)

    在Revit模型转JSON的过程中,通常是为了提取模型中的几何信息、属性数据以及结构信息,例如墙体、楼层、梁、柱等元素的坐标、尺寸、材质等。JSON文件可以作为接口,与其他软件或服务进行集成,比如进行可视化渲染、...

Global site tag (gtag.js) - Google Analytics