博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
net.sf.json.JSONException: There is a cycle in the hierarchy!的解决办法
阅读量:4488 次
发布时间:2019-06-08

本文共 2635 字,大约阅读时间需要 8 分钟。

   使用Hibernate manytoone属性关联主表的时候,如果使用JSONArray把pojo对象转换成json对象时,很容易出现循环的异常。解决的办法就是,

在转换json对象时忽略manytoone属性的对象。比如student类中有course属性,忽略course属性,就不会再出错。

    当pojo对象中存在时间(Date)类型时,转换成json后的对象,时间格式不符合使用要求。在转换时,可以定义时间的格式。

public String getJson(List
list){ JsonConfig jsonConfig = new JsonConfig(); //建立配置文件 jsonConfig.setIgnoreDefaultExcludes(false); //设置默认忽略 jsonConfig.setExcludes(new String[]{"course"}); // 设置javabean中日期转换时的格式 jsonConfig.registerJsonValueProcessor(Date.class, new JsonDateValueProcessor("yyyy-MM-dd")); JSONArray json=JSONArray.fromObject(list,jsonConfig); return json;}

时间格式转换辅助类

package org.jeecgframework.web.ksxdcgzh.entity;import java.text.SimpleDateFormat;import java.util.Date;import net.sf.json.JsonConfig;import net.sf.json.processors.JsonValueProcessor;public class JsonDateValueProcessor implements JsonValueProcessor{     private String format = "yyyy-MM-dd HH:mm:ss";                public JsonDateValueProcessor()          {          }                public JsonDateValueProcessor(String format)          {              this.format = format;          }             @Override    public Object processArrayValue(Object value, JsonConfig jsonConfig) {        // TODO Auto-generated method stub         String[] obj = {};              if (value instanceof Date[])              {                  SimpleDateFormat sf = new SimpleDateFormat(format);                  Date[] dates = (Date[]) value;                  obj = new String[dates.length];                  for (int i = 0; i < dates.length; i++)                  {                      obj[i] = sf.format(dates[i]);                  }              }              return obj;      }    @Override    public Object processObjectValue(String key, Object value, JsonConfig jsonConfig) {        // TODO Auto-generated method stub        if (value instanceof Date)          {              String str = new SimpleDateFormat(format).format((Date) value);              return str;          }          return value;      }     public String getFormat()          {              return format;          }                public void setFormat(String format)          {              this.format = format;          }  }

 2 

 在一对多的实体关系中,转换json时要忽略引用的属性。

@Entity@Table(name = "studentl", schema = "")@DynamicUpdate(true)@DynamicInsert(true)@SuppressWarnings("serial")@JsonIgnoreProperties(value={
"course"}) //转换json时忽略course对象,以免造成死循环public class StudentEntity implements java.io.Serializable { private courseEntity course; ......}

 

转载于:https://www.cnblogs.com/heyesp/p/5629924.html

你可能感兴趣的文章
sun.misc.Unsafe 详解
查看>>
Python批量获取京东商品列表信息
查看>>
2017.7.10 C组总结
查看>>
MyEclipse下安装FatJar打包工具
查看>>
[Web Tools] 实用的Web开发工具
查看>>
ContentProvider
查看>>
欢迎来到Attention的博客
查看>>
获取IOS bundle中的文件
查看>>
document
查看>>
Hadoop下大矩阵乘法Version2
查看>>
iPhone内存溢出——黑白苹果
查看>>
Struts2学习笔记(十二) 类型转换(Type Conversion)(下)
查看>>
tcpdump学习
查看>>
局域网内传输文件速度慢
查看>>
Linux的核心版本(摘抄)
查看>>
CASE表达式
查看>>
zkw线段树
查看>>
作业1226
查看>>
mainline.js主线
查看>>
fseek()
查看>>