net.sf.json.JSONException: There is a cycle in the hierarchy!和registerJsonValueProcessor

最近在做一个前后端分离的项目,所有的数据都要用json输出到前台,解决完跨域问题后,数据的输出又是一个问题。因为里面所有的实体类都有外键,这样都会出现net.sf.json.JSONException: There is a cycle in the hierarchy 这样的错误。

开始时候是创建数据量比较小,创建的是VO类,把要输入到前端页面的数据创建一个VO类,然后再转json输出到前端。但是这样重复的工作量比较大,而且创建的VO类在前端页面修改更换数据后,会很麻烦。

后来用 JsonConfig 来忽略掉这个属性,示例如下:

 

下面再逐一解释:

JsonConfig jsonConfig = new JsonConfig();  //建立配置文件
jsonConfig.setIgnoreDefaultExcludes(false);  //设置默认忽略
//jsonConfig.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);  //这个据说是可以控制转json时候对象循环的层数,试了没什么用,不知道是不是我的方法或方式不对
jsonConfig.setExcludes(new String[] {"user","toUser"});  //忽略的字段

里面写的是一个String数组,可以写多个字段,我这个里面有两个字段需要忽略:user,toUser

把要转json的对象里面包含的外键对象忽略,这样就不会出现net.sf.json.JSONException: There is a cycle in the hierarchy的错误

 

在下面就是对象里面有一个字段是时间类型,转json后时间格式就不符合使用要求。示例:

这就是转json后出现的时间格式。

使用jsonConfig.registerJsonValueProcessor()对时间进行格式转换

这是时间格式转换的

转换后的数据:

 

对象转json需要对对象里面的外键对象进行忽略,需要对是时间格式的数据进行格式转换。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值