使用java生成json时产生栈溢出错误问题及解决方案
目录
- java生成json时产生栈溢出错误
- 环境
- 这里会出现栈溢出错误
- json转换时出现栈内存溢出
java生成json时产生栈溢出错误
环境
java + hibernate +html
本来,java中使用json事件很正常的事,但小心有的地方有点“坎儿”。
比如,在java中建立了json对象想传到前台去:
List<Comment> commentsList = commentMng.findByArticleId(articleid); JSONArray jsonMembers = new JSONArray(commentsList); ...
注意这里,得到了一个关于Comment的list数组commentsList。如果Comment类型中的成员变量,都是普通的成员变量,那么ok,这么操作没问题。
如果Comment类型的表中包含外键,而Comment本身又与该外键对应的变量是多对一的关系,比如Comment中有个Article字段,多个Comment变量可以对应一个Article变量。
那么在这种情况下:
JSONArray jsonMembers = new JSONArray(commentsList);
这里会出现栈溢出错误
java.lang.StackOverflowError
在这种情况下,解决的办法就是将原有的List类型的list分解,也就是将commentsList分解,单独将变量传进JSONArray:
JSONArray jsonMembers = new JSONArray(); for ( Comment comment : commentsList) { JSONObject jsonObject = new JSONObject(); jsonObject.put("id", blogComment.getId()); ... ... jsonMembers.put(jsonObject); }
当然那个多对一的字段信息如果想传递进去,也是不能直接将Comment类型的变量放到jsonObject里面的,而是需要字符串化,总之专递的尽量是字符串信息。
json转换时出现栈内存溢出
加上注解忽略这个字段,最好两个同时加
jsonignore
是jackson包下的jsonfield
是fastjson包下的
有时候分不清就同时加上注解,以防万一
这个问题应该是我jpa一对多的问题(赶快记录一下)
以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。
相关推荐
-
深入内存原理谈JS中变量存储在堆中还是栈中
目录 一.装不进冰箱的大象 二.影分身的字符串 三.如朕亲临的 '奇球' 四.扑朔迷离的数字 五.小结:基本类型到底存在哪里? JavaScript中基本类型存储在堆中还是栈中? ---- 不基本类型的基本类型 看到这个问题,相信大家都觉得这个题目实在基础的不能再基础了.随手百度一下,就能看到很多人说:基本类型存在栈中,引用类型存在堆中. 真的这么简单么? 一.装不进冰箱的大象 让我们看一下这段代码: 在这里,我们声明了一个67MiB大小的字符串,如果字符串真的存在栈中,这就不好解释了.毕竟,v
-
jstack+jdb命令查看线程及死锁堆栈信息的实例
如果程序挂死,有时使用jstack查看进程中线程信息时,需要添加上-F参数,此时如果有死锁信息,则可能不会打印出死锁堆栈信息,使用jdb则可以查看当前死锁线程的运行堆栈. 如下模拟一个简单的死锁程序 package com.demo.bootdemo; import java.util.HashMap; import java.util.Map; import org.springframework.context.ApplicationListener; import org.springfr
-
JS堆栈内存的运行机制详解
目录 栈内存 ECStack 堆内存 数据类型创建步骤 在js引擎中对变量的存储主要有两个位置,堆内存和栈内存.栈内存主要用于存储各种基本类型的变量,包括Boolean.Number.String.Undefined.Null,以及对象变量的指针(地址值).栈内存中的变量一般都是已知大小或者有范围上限的,算作一种简单存储.而堆内存主要负责像对象Object这种变量类型的存储,对于大小这方面,一般都是未知的. 栈内存 ECStack 栈内存ECStack(Execution Context Sta
-
一文让你快速了解JavaScript栈
目录 前言 什么是栈? JavaScript中的栈 栈的应用场景 函数调用堆栈 有效的括号 总结 前言 前面两篇文章介绍了数据结构和算法的一些前置内容,这篇文章开始正式学习常见的数据结构,首先学习的就是栈(Stack). 什么是栈? 栈全称为堆栈,是一种先进后出的的数据结构,栈中只有两种基本操作,也就是插入和删除,也就是入栈和出栈操作,栈只有一端可以进行入栈和出栈操作,我们将其称为栈顶,另一端称其为栈底:如下图展示了栈这个数据结构: JavaScript中的栈 JavaScript并没有栈这个数
-
JavaScript实现栈结构详细过程
目录 一.认识栈结构 二.栈结构封装 三.十进制转化为二进制 一.认识栈结构 我们知道数组是一种常见的数据结构,并且可以在数组的任意位置插入和删除数据,但是有时候,我们为了实现某些功能,必须对这种任意性加以限制,而栈和队列就是比较常见的受限的数据结构,我们先来看看栈. 栈(stack),它是一种受限的线性表,后进先出(LIFO) 其限制性是允许在表的一端进行插入和删除运算.这一端被称为栈顶,相对的,把另一端,称为栈底. LIFO(last in first out)表示就是后进入的元素,第一个弹
-
JavaScript中栈和队列应用详情
目录 什么是栈和队列 什么时候用到栈 目录的计算 什么是栈和队列 栈如果用数组模拟的话是类似于一个U形桶状堆栈空间,地下是封口的,只能从顶部一个地方进出,它的进出都是有顺序的,看下图:如果是进入,则是最下是最先进入的,如果要出,则是从最顶部先出 和队列来对比,只是数据结构相同,队列是一侧进一侧出,做任务队列调度的时候都是先入先出 什么时候用到栈 从编辑器开发写代码的时候,如果代码的中的括号写错了,则很容易判定出那个地方少了括号,在JavaScript语法中有可以设定大括号{}.中括号:[].小括
-
使用java生成json时产生栈溢出错误问题及解决方案
目录 java生成json时产生栈溢出错误 环境 这里会出现栈溢出错误 json转换时出现栈内存溢出 java生成json时产生栈溢出错误 环境 java + hibernate +html 本来,java中使用json事件很正常的事,但小心有的地方有点“坎儿”. 比如,在java中建立了json对象想传到前台去: List<Comment> commentsList = commentMng.findByArticleId(articleid); JSONArray jsonMembers
-
java生成json实现隐藏掉关键属性
目录 java生成json隐藏关键属性 因此解决方案如下 java实体转json忽略属性 java生成json隐藏关键属性 今天在工作中遇到一个这样的问题,当后端返回数据时一些关键信息或敏感信息并不想返回到前端,但是又懒得定义专用的DTO返回怎么办(强烈不推荐,最好定义专用的DTO返回),比如一张用户表有属性有用户名.密码.昵称.头像.性别.个人简介,用@ResponseBody生成json直接用户名和密码都输出到前台展示了,用户名和密码这两个属性怎么隐藏掉. 我们项目中使用的是Spring B
-
java操作json对象出现StackOverflow错误的问题及解决
目录 java操作json对象出现StackOverflow错误 解决方法 记录一次json转换对象的异常 java操作json对象出现StackOverflow错误 今天在做项目的时候,遇到一个非常怪异的问题.一个java实体类中存在多个属性,每一个属性都是JsonObject类型. 在程序中用setXXX方法对这些属性设置值的时候,竟然报了Stack Overflow的错误.仔细检查了一遍程序,确定没有循环引用和死递归的发生.最后经过和查阅相关资料,终于发现我用的JsonObject是net
-
fastjson生成json时Null属性不显示的解决方法
举个例子 Map < String , Object > jsonMap = new HashMap< String , Object>(); jsonMap.put("a",1); jsonMap.put("b",""); jsonMap.put("c",null); jsonMap.put("d","wuzhuti.cn"); String str = JSO
-
Jquery跨域获得Json时invalid label错误的解决办法
最后,仔细安静下来,细读 json 官方文档后发现这么一段: JSON数据是一种能很方便通过JavaScript解析的结构化数据.如果获取的数据文件存放在远程服务器上(域名不同,也就是跨域获取数据),则需要使用jsonp类型.使用这种类型的话,会创建一个查询字符串参数 callback=? ,这个参数会加在请求的URL后面.服务器端应当在JSON数据前加上回调函数名,以便完成一个有效的JSONP请求.如果要指定回调函数的参数名来取代默认的callback,可以通过设置$.ajax()的jsonp
-
详解java生成json字符串的方法
例1:将map对象添加一次元素(包括字符串对.数组),转换成json对象一次. 代码: package com.json; //这是使用org.json的程序: import java.util.HashMap; import java.util.Map; import org.json.JSONException; import org.json.JSONObject; public class jsontest { public static void main(String[] args)
-
java生成json数据示例
JsonTools.java 复制代码 代码如下: package com.lihua.json.tools; import net.sf.json.JSONObject; public class JsonTools { public JsonTools() { } /** * @param key * 表示json字符串的头信息 * @param value * 是对解析的集合的类型 * @return */ //将数据转
-
用Rational Rose逆向工程(java)生成类图(教程和错误解决)
拿到了项目框架工程代码却没有uml图,那么方法之间的调用关系功能流转就不容易看出来,那么如何产生类图呢,记忆里方法有下:1.rose逆向工程,2.together rose有了,together前天才卸掉,那么就用ROSE,摸索后得出以下步骤,知道的就不用看了,很粗糙的:) 1.新建一个ROSE工程,选择J2EE模板,2.如图 3.在出现的界面中,CLASSPATH中加入源代码的目录,加入支持的包,点'ADD RECURSIVE'点 'SELECT ALL'' 点REVERSE ',完成后没任何
-
浅谈使用java解析和生成JSON
JSON概述 JSON即javascript object notation,是javascript对象表示法的子集.具有以下特点: 数据放在键值对中: 数据由逗号分隔: 花括号表示对象: 方括号表示数组. JSON的值可以是: 数字(整数或浮点数) 字符串(在双引号中) 逻辑值(true或false) 数组(方括号内) 对象(花括号内) null JSON的基本语法 JSON对象 JSON对象在花括号中书写,对象可以包含多个键值对,例如: { "firstName":"Jo
-
Java中JSON处理工具类使用详解
本文实例为大家分享了JSON处理工具类的具体代码,供大家参考,具体内容如下 import java.io.IOException; import java.util.Date; import java.util.HashMap; import java.util.Map; import javax.servlet.http.HttpServletResponse; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.seri
随机推荐
- Android实现QQ图片说说照片选择效果
- 自动化下载并检测ftp文件备份的shell脚本
- Python pip安装lxml出错的问题解决办法
- JQuery页面图片切换和新闻列表滚动效果的具体实现
- jquery ztree实现下拉树形框使用到了json数据
- linux下apache开启url重写的方法(详细说明)
- Cmd 启动命令解释器 Cmd.exe 的新实例
- 利用递增的数字返回循环渐变的颜色的js代码
- filters.revealTrans.Transition使用方法小结
- python中使用百度音乐搜索的api下载指定歌曲的lrc歌词
- MySQL WorkBench管理操作MySQL教程
- 基于android中权限的集合汇总
- Ajax 核心框架函数及例子
- js跨域调用WebService的简单实例
- 低版本IE正常运行HTML5+CSS3网站的3种解决方案
- iframe 的用法与注意事项
- jQuery插件EnPlaceholder实现输入框提示文字
- 发现ravmsmon.exe病毒的清除方法
- python循环监控远程端口的方法
- JQUERY 浏览器判断实现函数