在使用FastJson开发遇到的的坑
1.list中放入同一个对象,会出现内存地址引用{"$ref":"#[0]"},后台可以识别,但是前台不会识别
@Test
public void testList(){ User user = new User();
user.setUserName("cgx");
user.setPassword("123456"); User user1 = new User();
user1.setUserName("zbz");
user1.setPassword("123456"); ArrayList list = new ArrayList();
list.add(user);
list.add(user1);
list.add(user); String jsonString = JSON.toJSONString(list,SerializerFeature.DisableCircularReferenceDetect);//关闭循环引用
System.out.println(jsonString);
}
JSON.toJSONString(list,true),会格式化json,方便查看
2.对象相互包含
@Test
public void testList1(){ User user = new User();
user.setUserName("cgx");
user.setPassword("123456"); HashSet<Role> roles = new HashSet<Role>();
HashSet<User> users = new HashSet<User>();
users.add(user); Role role = new Role();
role.setName("测试角色");
role.setUsers(users);
roles.add(role); user.setRoles(roles); //两种办法防止循环引用
//1.在bean的属性上直接@JSONField(serialize=false)去掉不需要转换的属性 //2. // 遇到sid和sname属性正常进行转换json
SimplePropertyPreFilter filter = new SimplePropertyPreFilter("password","roles","name"); String jsonString = JSON.toJSONString(user,filter,SerializerFeature.DisableCircularReferenceDetect);
System.out.println(jsonString);
}
在实体类中使用@JSONField(serialize=false),是不是此字段就不返回了,放弃转换该字段
filter进行过滤,想要现实的字段,进行转换的字段,写在过滤中,其他不进行转换
三、案例
Page<Inventory> page = inventoryService.getInventoryList(pageNum, size, sortName, sortType, productId, dueDate, creator,
status);
String jsonString = JSON.toJSONString(page,SerializerFeature.DisableCircularReferenceDetect);//关闭集合循环引用 return JSON.parseObject(jsonString);
1.page为jpa分页返回的page,其中有list,如果直接返回,就会出现内存地址引用{"$ref":"#[0]"},前台不会识别,所以使用SerializerFeature.DisableCircularReferenceDetect来关闭循环引用;
2.Inventory库存对象中:
@OneToOne(mappedBy = "inventory", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private GcOrder gcConsume;
GcOrder自营消费关联类:
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "InventoryId")
private Inventory inventory;
库存与订单消费一对一双向关联,会出现栈溢出java.lang.StackOverflowError报错,究其原因是----自关联进入了死循环,解决办法是在Inventory对象的gcConsume属性上使用@JSONField(serialize = false),使其不进行序列化。
/**
* 自营消费记录-关联
*/
@JSONField(serialize = false)
@OneToOne(mappedBy = "inventory", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private GcOrder gcConsume;
在使用FastJson开发遇到的的坑的更多相关文章
- Android开发需要注意的坑
Android开发需要注意的坑一览对于一些Android开发过程中坑爹.细小,但又重要的错误的总结Android开发在路上:少去踩坑,多走捷径其他参考: google官方版本发布图 umeng ...
- 总结微信小程序开发中遇到的坑
总结微信小程序开发中遇到的坑,一些坑你得一个一个的跳啊,/(ㄒoㄒ)/~~ 1,页面跳转和参数传递实例 首先说一下我遇到的需求有一个我的消息页面,里面的数据都是后端返回的,返回的数据大致如下,有一个是 ...
- celery开发中踩的坑
celery开发中踩的坑 celery连接redis 当使用redis做broker,redis连接需要密码时: BROKER_URL='redis://:xxxxx@127.0.0.1:6379/0 ...
- Android—基于微信开放平台v3SDK,开发微信支付填坑。
接触微信支付之前听说过这是一个坑,,,心里已经有了准备...我以为我没准跳坑出不来了,没有想到我填上了,调用成功之后我感觉公司所有的同事都是漂亮的,隔着北京的大雾霾我仿佛看见了太阳~~~好了,装逼结束 ...
- H5拍照应用开发经历的那些坑儿
一.项目简介 1.1.项目背景:这是一个在移动终端创新应用的项目,用户在浏览器端(微信/手Q)即可完成与金秀贤的合影,希望通过这样一种趣味体验,引发用户的分享与转发的热潮. 1.2.系统要求:ios6 ...
- 微信小程序开发技巧及填坑记录
以下是自己在开发过程中遇到的坑和小技巧,记录以下: 1.出现了 page[pages/XXX/XXX] not found.May be caused by :1. Forgot to add pag ...
- Android 开发绕不过的坑:你的 Bitmap 究竟占多大内存?
0.写在前面 本文涉及到屏幕密度的讨论,这里先要搞清楚 DisplayMetrics 的两个变量,摘录官方文档的解释: density:The logical density of the displ ...
- 记录hyperic-hq搭建开发环境遇到的坑
这个星期接到一个新的任务:解决HQ(一个用JAVA开发的开源的运维监控平台)现在遇到的snmp升级到3.0后bug.公司用的HQ是4.6版本.于是,我把项目从gitlab上clone下来后,就开始了我 ...
- Android SDK 开发——发布使用踩坑之路
前言 在 Android 开发过程中,有些功能是通用的,或者是多个业务方都需要使用的. 为了统一功能逻辑及避免重复开发,因此将该功能开发成一个 SDK 是相当有必要的. 背景 刚好最近自己遇到了类似需 ...
随机推荐
- [洛谷P3175][HAOI2015]按位或
题目大意:刚开始有一个数$x=0$,每秒钟有一个数$y\in[0,2^n)(n\leqslant20)$按一定概率随机出现,数$i$的概率为$p_i$,保证$\sum\limits_{i=0}^{2^ ...
- Container With Most Water - LeetCode
目录 题目链接 注意点 解法 小结 题目链接 Container With Most Water - LeetCode 注意点 没什么好注意的... 解法 解法一:暴力求解,假设任意两个端点会是最佳答 ...
- debian包管理
常用的包管理工具有:apt.apt-get.apt-cache.apt-file.aptitude.dpkg等.功能有重复的,挑顺手的即可. 1.apt # apt --help list - lis ...
- substring()方法到底做了什么?不同版本的JDK中是否有区别?为什么?
该文章是图说Java系列文章中的一篇 substring(int beginIndex, int endIndex)方法在jdk 6和jdk 7中的实现是不同的.了解他们的区别可以帮助你更好的使用 ...
- Hbase(七)hbase高级编程
一.Hbase结合mapreduce 为什么需要用 mapreduce 去访问 hbase 的数据? ——加快分析速度和扩展分析能力 Mapreduce 访问 hbase 数据作分析一 ...
- bzoj 刷题计划~_~
bzoj 2818 两个互质的数的gcd=1,所以他们同时乘一个素数那么他们的gcd=这个素数,所以枚举素数p找n/p以内有多少对互质数,用欧拉函数. bzoj 2809 可并堆,对于每一个子树显然是 ...
- Vue.js学习笔记(二)
Vue.js不支持IE8及以下的版本,因为vue使用了IE8无法模拟的ECMAScript5的特性,它支持所有兼容ECMAScript5的浏览器. <!DOCTYPE html> < ...
- MySQL报错】ERROR 1558 (HY000): Column count of mysql.user is wrong. Expected 43, found 39.
之前在centos6.4系统安装的是自带的mysql 5.1版本,后来升级到了5.6版本,执行以下命令报错 在网上查找原因说说因为升级不当导致,执行以下命令即可正常执行命令 mysql_upgrade ...
- Android 使用GPS获取到经纬度后 无法在Android8.0上使用Geocoder类获取位置信息
由于我的应用在获取到经纬度后在Android8.0不能使用如下代码获取位置信息.只好使用百度地图 WEB服务API 通过调接口的方式获取位置信息. Geocoder geocoder = new Ge ...
- vscode nodejs智能提示功能
1.依赖一些第三方的插件,先安装typings这个包,如果使用的是淘宝镜像,输入cnpm.cmd执行: cnpm i typings -g //cnpm install typings -global ...