1.list中放入同一个对象,会出现内存地址引用{"$ref":"#[0]"},后台可以识别,但是前台不会识别

  1. @Test
  2. public void testList(){
  3.  
  4. User user = new User();
  5. user.setUserName("cgx");
  6. user.setPassword("123456");
  7.  
  8. User user1 = new User();
  9. user1.setUserName("zbz");
  10. user1.setPassword("123456");
  11.  
  12. ArrayList list = new ArrayList();
  13. list.add(user);
  14. list.add(user1);
  15. list.add(user);
  16.  
  17. String jsonString = JSON.toJSONString(list,SerializerFeature.DisableCircularReferenceDetect);//关闭循环引用
  18. System.out.println(jsonString);
  19. }
  1. JSON.toJSONString(list,true),会格式化json,方便查看

2.对象相互包含

  1. @Test
  2. public void testList1(){
  3.  
  4. User user = new User();
  5. user.setUserName("cgx");
  6. user.setPassword("123456");
  7.  
  8. HashSet<Role> roles = new HashSet<Role>();
  9. HashSet<User> users = new HashSet<User>();
  10. users.add(user);
  11.  
  12. Role role = new Role();
  13. role.setName("测试角色");
  14. role.setUsers(users);
  15. roles.add(role);
  16.  
  17. user.setRoles(roles);
  18.  
  19. //两种办法防止循环引用
  20. //1.在bean的属性上直接@JSONField(serialize=false)去掉不需要转换的属性
  21.  
  22. //2.
  23.  
  24. // 遇到sid和sname属性正常进行转换json
  25. SimplePropertyPreFilter filter = new SimplePropertyPreFilter("password","roles","name");
  26.  
  27. String jsonString = JSON.toJSONString(user,filter,SerializerFeature.DisableCircularReferenceDetect);
  28. System.out.println(jsonString);
  29. }

  在实体类中使用@JSONField(serialize=false),是不是此字段就不返回了,放弃转换该字段

  filter进行过滤,想要现实的字段,进行转换的字段,写在过滤中,其他不进行转换

三、案例

  1. Page<Inventory> page = inventoryService.getInventoryList(pageNum, size, sortName, sortType, productId, dueDate, creator,
  2. status);
  3. String jsonString = JSON.toJSONString(page,SerializerFeature.DisableCircularReferenceDetect);//关闭集合循环引用
  4.  
  5. return JSON.parseObject(jsonString);

1.page为jpa分页返回的page,其中有list,如果直接返回,就会出现内存地址引用{"$ref":"#[0]"},前台不会识别,所以使用SerializerFeature.DisableCircularReferenceDetect来关闭循环引用;

2.Inventory库存对象中:

  1. @OneToOne(mappedBy = "inventory", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
  2. private GcOrder gcConsume;

GcOrder自营消费关联类:

  1. @OneToOne(fetch = FetchType.LAZY)
  2. @JoinColumn(name = "InventoryId")
  3. private Inventory inventory;

库存与订单消费一对一双向关联,会出现栈溢出java.lang.StackOverflowError报错,究其原因是----自关联进入了死循环,解决办法是在Inventory对象的gcConsume属性上使用@JSONField(serialize = false),使其不进行序列化。

  1. /**
  2. * 自营消费记录-关联
  3. */
  4. @JSONField(serialize = false)
  5. @OneToOne(mappedBy = "inventory", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
  6. private GcOrder gcConsume;

在使用FastJson开发遇到的的坑的更多相关文章

  1. Android开发需要注意的坑

    Android开发需要注意的坑一览​对于一些Android开发过程中坑爹.细小,但又重要的错误的总结​Android开发在路上:少去踩坑,多走捷径其他参考: ​google官方版本发布图 ​umeng ...

  2. 总结微信小程序开发中遇到的坑

    总结微信小程序开发中遇到的坑,一些坑你得一个一个的跳啊,/(ㄒoㄒ)/~~ 1,页面跳转和参数传递实例 首先说一下我遇到的需求有一个我的消息页面,里面的数据都是后端返回的,返回的数据大致如下,有一个是 ...

  3. celery开发中踩的坑

    celery开发中踩的坑 celery连接redis 当使用redis做broker,redis连接需要密码时: BROKER_URL='redis://:xxxxx@127.0.0.1:6379/0 ...

  4. Android—基于微信开放平台v3SDK,开发微信支付填坑。

    接触微信支付之前听说过这是一个坑,,,心里已经有了准备...我以为我没准跳坑出不来了,没有想到我填上了,调用成功之后我感觉公司所有的同事都是漂亮的,隔着北京的大雾霾我仿佛看见了太阳~~~好了,装逼结束 ...

  5. H5拍照应用开发经历的那些坑儿

    一.项目简介 1.1.项目背景:这是一个在移动终端创新应用的项目,用户在浏览器端(微信/手Q)即可完成与金秀贤的合影,希望通过这样一种趣味体验,引发用户的分享与转发的热潮. 1.2.系统要求:ios6 ...

  6. 微信小程序开发技巧及填坑记录

    以下是自己在开发过程中遇到的坑和小技巧,记录以下: 1.出现了 page[pages/XXX/XXX] not found.May be caused by :1. Forgot to add pag ...

  7. Android 开发绕不过的坑:你的 Bitmap 究竟占多大内存?

    0.写在前面 本文涉及到屏幕密度的讨论,这里先要搞清楚 DisplayMetrics 的两个变量,摘录官方文档的解释: density:The logical density of the displ ...

  8. 记录hyperic-hq搭建开发环境遇到的坑

    这个星期接到一个新的任务:解决HQ(一个用JAVA开发的开源的运维监控平台)现在遇到的snmp升级到3.0后bug.公司用的HQ是4.6版本.于是,我把项目从gitlab上clone下来后,就开始了我 ...

  9. Android SDK 开发——发布使用踩坑之路

    前言 在 Android 开发过程中,有些功能是通用的,或者是多个业务方都需要使用的. 为了统一功能逻辑及避免重复开发,因此将该功能开发成一个 SDK 是相当有必要的. 背景 刚好最近自己遇到了类似需 ...

随机推荐

  1. 读取Maven项目下resources目录下的配置文件(properties为例)

    配置文件:xxxxx.properties a.url=******************** b.url=---------------------------------- 读取配置文件: im ...

  2. vi写完文件保存时才发现是readonly😂

    在MAC上编辑apache配置文件,老是忘记sudo…… readonly的文件保存时提示 add ! to override, 但这仅是对root来说的啊! 百毒了一下竟然还有解决方案!! :w ! ...

  3. BZOJ5058 期望逆序对 【矩乘 + 组合数学 + 树状数组】

    题目链接 BZOJ5058 题解 可以发现任意两个位置\(A,B\)最终位置关系的概率是相等的 如果数列是这样: CCCCACCCCBCCCC 那么最终有\(7\)种位置关系 \((A,B)\) \( ...

  4. 使用telnet访问百度

    这里主要是玩一下http协议,查看http的header. 1.输入命令telnet访问百度 # telnet www.baidu.com 80 Trying 220.181.112.244... C ...

  5. Andoid自动判断输入是电话,网址或者Email的方法--Linkify

    Andoid自动判断输入是电话,网址或者Email的方法----Linkify的应用!http://blog.csdn.net/android_tutor/article/details/500016 ...

  6. spring-session使用配置(分布式共享session配置)

    1. 添加依赖 <dependency> <groupId>org.springframework.session</groupId> <artifactId ...

  7. Docker图形界面管理之DockerUI

    DockerUI DockerrUI是一个基于Docker API提供图形化页面简单的容器管理系统,支持容器管理.镜像管理. 1.1 下载镜像 docker pull abh1nav/dockerui ...

  8. vue写template的4种形式

    1.template标签(非单文件组件) <template id="t1"> <h2>66666666</h2> </template& ...

  9. linux网络编程框架

    OSI七层模型与TCP四层模型 OSI七层模型与TCP四层模型 BS和CS服务器架构 (1)CS架构介绍(client server,客户端服务器架构)(2)BS架构介绍(broswer server ...

  10. 数据分析与展示---Numpy数据存取与函数

    简介 一:数据的CSV文件存取(一维或二维) (一)写入文件savetxt (二)读取文件loadtxt 二:多维数据的存取 (一)保存文件tofile (二)读取文件fromfile (三)NumP ...