详解在springmvc中解决FastJson循环引用的问题
我们先来看一个例子:
packagecom.elong.bms;
importjava.io.OutputStream;
importjava.util.HashMap;
importjava.util.Map;
importcom.alibaba.fastjson.JSON;
publicclassTest{
publicstaticvoidmain(String[]args){
Map<String,Student>maps=newHashMap<String,Student>();
Students1=newStudent("s1",16);
maps.put("s1",s1);
maps.put("s2",s1);
byte[]bytes=JSON.toJSONBytes(maps);
System.out.println(newString(bytes));
}
}
输出:
{"s1":{"age":16,"name":"s1"},"s2":{"$ref":"$.s1"}}
可以看到,这个json如果发到前端是无法使用的,幸好FastJson提供了解决办法,我们来看下,解决办法为禁用循环引用检测,代码如下:
packagecom.elong.bms;
importjava.io.OutputStream;
importjava.util.HashMap;
importjava.util.Map;
importcom.alibaba.fastjson.JSON;
importcom.alibaba.fastjson.serializer.SerializerFeature;
publicclassTest{
publicstaticvoidmain(String[]args){
Map<String,Student>maps=newHashMap<String,Student>();
Students1=newStudent("s1",16);
maps.put("s1",s1);
maps.put("s2",s1);
SerializerFeaturefeature=SerializerFeature.DisableCircularReferenceDetect;
byte[]bytes=JSON.toJSONBytes(maps,feature);
System.out.println(newString(bytes));
}
}
输出如下:
{"s1":{"age":16,"name":"s1"},"s2":{"age":16,"name":"s1"}}
问题是如果我们在springmvc中使用的时候,需要将SerializerFeature注入到MessageConverter里面, FastJsonHttpMessageConverter
但是SerializerFeature是一个enum类型的,又是一个array,考虑到大部分人对这个不熟悉,直接上代码了。
<beanid="jsonConverter" class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter"> <propertyname="supportedMediaTypes"value="application/json;charset=UTF-8"/> <propertyname="features"> <arrayvalue-type="com.alibaba.fastjson.serializer.SerializerFeature"> <value>DisableCircularReferenceDetect</value> </array> </property> </bean> <beanid="DisableCircularReferenceDetect"class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean"> <propertyname="staticField"value="com.alibaba.fastjson.serializer.SerializerFeature.DisableCircularReferenceDetect"></property> </bean>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
热门推荐
10 朋友新年祝福语大全 简短
11 新年祝福语简短大方兔年
12 搬新家礼物祝福语简短
13 同学见面花束祝福语简短
14 五一假期祝福语幽默简短
15 离职欢送敬酒祝福语简短
16 对学弟的祝福语简短
17 考老师辞职祝福语简短
18 祝福语驱散霉运的话简短