springmvc中解决FastJson循环引用的问题
2015-07-06 09:36
701 查看
package com.elong.bms;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Map;
import com.alibaba.fastjson.JSON;
public class Test {
public static void main(String[] args) {
Map<String, Student> maps = new HashMap<String, Student>();
Student s1 = new Student("s1", 16);
maps.put("s1", s1);
maps.put("s2", s1);
byte[] bytes = JSON.toJSONBytes(maps);
System.out.println(new String(bytes));
}
}
输出
{"s1":{"age":16,"name":"s1"},"s2":{"$ref":"$.s1"}}
可以看到,这个json如果发到前端是无法使用的,幸好FastJson提供了解决办法,我们来看下,解决办法为禁用循环引用检测,代码如下:
package com.elong.bms;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Map;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
public class Test {
public static void main(String[] args) {
Map<String, Student> maps = new HashMap<String, Student>();
Student s1 = new Student("s1", 16);
maps.put("s1", s1);
maps.put("s2", s1);
SerializerFeature feature = SerializerFeature.DisableCircularReferenceDetect;
byte[] bytes = JSON.toJSONBytes(maps,feature);
System.out.println(new String(bytes));
}
}
{"s1":{"age":16,"name":"s1"},"s2":{"age":16,"name":"s1"}}
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Map;
import com.alibaba.fastjson.JSON;
public class Test {
public static void main(String[] args) {
Map<String, Student> maps = new HashMap<String, Student>();
Student s1 = new Student("s1", 16);
maps.put("s1", s1);
maps.put("s2", s1);
byte[] bytes = JSON.toJSONBytes(maps);
System.out.println(new String(bytes));
}
}
输出
{"s1":{"age":16,"name":"s1"},"s2":{"$ref":"$.s1"}}
可以看到,这个json如果发到前端是无法使用的,幸好FastJson提供了解决办法,我们来看下,解决办法为禁用循环引用检测,代码如下:
package com.elong.bms;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Map;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
public class Test {
public static void main(String[] args) {
Map<String, Student> maps = new HashMap<String, Student>();
Student s1 = new Student("s1", 16);
maps.put("s1", s1);
maps.put("s2", s1);
SerializerFeature feature = SerializerFeature.DisableCircularReferenceDetect;
byte[] bytes = JSON.toJSONBytes(maps,feature);
System.out.println(new String(bytes));
}
}
{"s1":{"age":16,"name":"s1"},"s2":{"age":16,"name":"s1"}}
相关文章推荐
- Java开源工具iText生成PDF简单实例
- Spring(之一)--基本用法
- java正则表达式语法大全
- 【Spring】AOP - 面向切面
- javaee jsp中servlet发生java.lang.ClassNotFoundException可能原因
- Java数组List换算方法
- Eclipse快速打开当前文件所在文件夹
- 从eclipse中导入myeclipse项目运行是出现“不能部署到服务器”的错误。
- Java实训最后一天啦
- Java实训第四天
- JDK源码分析之concurrent包(二) -- 线程池ThreadPoolExecutor
- java的向上转型
- Java实训第三天
- Java log编程规范(For log4j)
- JAVA 比较两张图片的相似度
- 2015070601 - EffactiveJava笔记 - 第13条 使类和成员的可访问性最小(2)
- 开源 java CMS - FreeCMS2.3会员积分记录
- (Java)路径问题(绝对路径、相对路径)
- (Java)转发和重定向的区别
- JavaSript模块规范 - AMD规范与CMD规范介绍