在springmvc中解决FastJson循环引用的问题

编程技术  /  houtizong 发布于 3年前   82

          我们先来看一个例子:

         

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"}}

 

 

    问题是如果我们在spring mvc中使用的时候,需要将SerializerFeature注入到MessageConverter里面,

     FastJsonHttpMessageConverter

   

    但是SerializerFeature是一个enum类型的,又是一个array,考虑到大部分人对这个不熟悉,直接上代码了。

   

<bean id="jsonConverter"     class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">      <property name="supportedMediaTypes" value="application/json;charset=UTF-8"/>      <property name="features">        <array value-type="com.alibaba.fastjson.serializer.SerializerFeature">           <value>DisableCircularReferenceDetect</value>        </array>      </property>   </bean>   <bean id="DisableCircularReferenceDetect" class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean">      <property name="staticField" value="com.alibaba.fastjson.serializer.SerializerFeature.DisableCircularReferenceDetect"></property>   </bean>

 

     

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!

留言需要登陆哦

技术博客集 - 网站简介:
前后端技术:
后端基于Hyperf2.1框架开发,前端使用Bootstrap可视化布局系统生成

网站主要作用:
1.编程技术分享及讨论交流,内置聊天系统;
2.测试交流框架问题,比如:Hyperf、Laravel、TP、beego;
3.本站数据是基于大数据采集等爬虫技术为基础助力分享知识,如有侵权请发邮件到站长邮箱,站长会尽快处理;
4.站长邮箱:[email protected];

      订阅博客周刊 去订阅

文章归档

文章标签

友情链接

Auther ·HouTiZong
侯体宗的博客
© 2020 zongscan.com
版权所有ICP证 : 粤ICP备20027696号
PHP交流群 也可以扫右边的二维码
侯体宗的博客