`
zzc1684
  • 浏览: 1214282 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

jackson转换json出现无限递归问题

阅读更多

环境:springmvc+hibernate+json

 

在controller返回数据到统一json转换的时候,出现了json infinite recursion stackoverflowerror的错误,即json在将对象转换为json格式的数据的时候,出现了无限递归调用的情况。

 

具体的情况如下:

 

A类中,有个属性:List<B> b, A与B的关系为 OneToMany;在B类中,有属性A a,引用到A中的字段id,并作为外键。hibernate查询结果正常,可以看到返回的A对象中,有b参数值,但在json转换的时候就出现了无限递归 的情况。个人分析,应该是json在序列化A中的b属性的时候,找到了B类,然后序列化B类,而B类中有a属性,因此,为了序列化a属性,json又得去 序列化A类,如此递归反复,造成该问题。

 

解决:

 

在B类中a的getter setter方法上加注解@JsonBackReference,其实自己试过只在setter方法上加@JsonBackReference也够了。

 


 

参考文章:

http://my.oschina.net/u/943437/blog/145246

分享到:
评论

相关推荐

    解决spring mvc JSON 无限死循环

    然而,在某些情况下,由于对象之间的循环引用,可能会导致JSON序列化过程中出现无限递归的问题,进而引发StackOverflowError异常。本文将详细探讨这一问题,并提供几种有效的解决方案。 #### 问题描述 当我们在...

    json和bean转换

    转换JSON到Java Bean的过程通常涉及以下步骤: 1. 创建对应的Java Bean类,定义与JSON对象中的键相对应的私有成员变量,并生成getter和setter方法。 2. 使用JSON库提供的方法将JSON字符串解析成一个JSON对象(如...

    用于java对象与json对象间的相互转换(net.sf.json.JSONObject)

    - **异常处理**:在转换过程中,可能会遇到JSON格式错误、字段不匹配等问题,应捕获并处理`JSONException`。 以上就是使用`net.sf.json.JSONObject`进行JSON操作的基本步骤和进阶技巧。在实际开发中,你可能还需要...

    jackjson类型转换各种方法

    杰克逊(Jackson)是Java领域中广泛使用的JSON处理库,它提供了强大的功能,使得JSON与其他数据类型(如Java对象)之间的转换变得简单且高效。本文将深入探讨Jackson框架在JSON转换中的各种方法,帮助你更好地理解和...

    JsonUtils(Json转换工具类)

    在进行JSON转换时,可能会遇到解析错误、格式错误等问题。`JsonUtils`应该有适当的异常处理机制,当出现错误时,能够抛出易于理解和处理的异常,而不是简单的运行时异常。 7. **性能优化**: 高效是工具类的一个...

    josn 各种转换

    本篇将深入探讨JSON的各种转换,包括JSON字符串与Java对象之间的转换,以及如何使用Jackson库进行高效操作。 一、JSON字符串与Java对象的转换 1. JSON字符串转Java对象 当你从服务器获取到JSON数据时,通常需要将...

    java转目录树json

    3. **转化成JSON**:有了目录树的模型后,我们可以使用`org.json`库(或者其他支持JSON的库,如Gson、Jackson)将其转化为JSON格式。`JSONObject`和`JSONArray`类可以帮助我们构建JSON对象。创建一个方法,接受`...

    例举fastJson和jackson转json的区别

    以下是对FastJson和Jackson转换JSON区别的详细分析: 1. **Jackson ObjectMapper转换JSON** Jackson的`ObjectMapper`类是其核心转换工具。例如,给定一个JSON字符串,`ObjectMapper`可以将它转换为Java对象。在...

    模仿BeJSON,HiJson格式化JSON,在AS控制台分层输出接口日志

    4. **深度控制**:为了防止无限递归,我们需要设定一个最大递归深度。当达到这个深度时,可以将剩余的JSON对象以省略号(...)表示。 5. **代码实现**:`JsonFomat`类可能会包含以下几个核心方法: - `printJson...

    将对象转换为json串的工具类.docx

    - 对于异常处理,打印堆栈跟踪但不中断整个转换过程,确保即使遇到问题也能尽可能多地转换其他字段 4. **辅助方法** - `map2Str`:处理 `Map` 类型的对象,遍历其所有键值对并转换为JSON格式 - `list2Str`:处理...

    http传输与json解析

    Android提供了多种处理JSON的库,如Gson、Jackson和org.json等。以org.json为例,解析JSON字符串的基本步骤如下: 1. 引入库:在Android项目中,首先需要添加org.json库的依赖。 2. 解析JSON字符串:使用`...

    将对象转换为json串的工具类.pdf

    但是,这个类没有处理循环引用的问题,如果对象图中存在循环引用,可能会导致无限递归。此外,它也没有处理枚举类型、自定义类型等特殊情况。在实际使用时,可能需要结合其他库,如Jackson或Gson,来提供更全面的...

    json解析工具类

    例如,递归解析JSON数组或递归地解析嵌套的对象。 在实际开发中,`JsonParser2Aoyun`可能还包含了对错误的处理,如自定义异常,以及对性能的优化,例如缓存已解析的JSON对象或使用预编译的JsonPath表达式。 总之,...

    json解析所需夹包

    5. **处理复杂JSON结构**:JSON可以包含嵌套的对象和数组,对于复杂的结构,可以使用递归或递归方法进行解析。 6. **类型转换**:在Java中,从JSON字符串转换到特定类型的Java对象时,需要进行类型转换。例如,从...

    Jackson资源jar包+api

    使用Jackson时,需要注意的点包括性能优化(如开启流模式、使用`writeValueAsBytes`代替`writeValueAsString`以减少内存消耗)、处理循环引用和避免无限递归等问题。 总之,Jackson是一个强大的JSON处理工具,其...

    处理JSON的jar包

    4. **处理复杂结构**:对于嵌套的对象和数组,`json-lib`提供了递归解析和构建的方法。 5. **自定义序列化和反序列化**:如果你需要对特定类型的对象进行特殊处理,可以通过实现`JSONAware`接口来自定义JSON转换...

    Jackson注解学习参考

    10. `@JsonIdentityInfo`: 处理循环引用或重复引用的问题,避免无限递归。 博客文章“Jackson注解学习参考”可能详细解释了这些注解的使用场景、配置选项以及如何在实际项目中应用它们。此外,还可能涵盖了与...

    遍历JSON文件内容

    3. **解析JSON内容**:使用Jackson库的`ObjectMapper`类将JSON字符串转换为Java对象。可以解析为`JsonNode`对象,这是Jackson库中的基础类型,可以用来遍历JSON结构。以下代码展示了如何做到这一点: ```java ...

    JSON与JAVA数据的相互转换 (2).pdf

    在Java中,为了实现JSON与Java数据类型的相互转换,通常会使用第三方库,如FastJSON、Jackson、Gson等。这里提到的是FastJSON,它是阿里巴巴提供的一个高性能的JSON库。 1. **JavaBean到JSON的转换** 要将...

    自定义方法实现msp和json互转(底层实现原理,绝对值)

    在实际开发中,我们通常会使用成熟的库,如Jackson、Gson或Fastjson,它们已经实现了高效且健壮的JSON与Java对象的转换。然而,了解自定义实现可以帮助我们更好地理解这些库的工作原理,以及如何针对特定需求进行...

Global site tag (gtag.js) - Google Analytics