FastJson序列化对象出现$ref循环检测问题

问题描述

对象中有自己类型的成员变量,为了解决json序列化的循环引用问题的(循环引用即A中包含B,B中又包含了A,这样在序列化你过程中会进入死循环),所以在出现该情况。

多级菜单pojo

  public class Menu implements Serializable{
      private Integer id;
      private String name; // 菜单名称
      private String linkUrl; // 访问路径
      private String path;//菜单项所对应的路由路径
      private Integer priority; // 优先级(用于排序)
      private String description; // 描述
      private String icon;//图标
      private Set<Role> roles = new HashSet<Role>(0);//角色集合
      private List<Menu> children = new ArrayList<>();//子菜单集合      <== 子菜单序列化失败
      private Integer parentMenuId;//父菜单id
      private Integer roleId;//对应角色id
      private Integer level;
  }

修改fastjson配置

添加配置DisableCircularReferenceDetect

  <mvc:annotation-driven>
    <mvc:message-converters register-defaults="true">
        <!--不需要视图解析器,项目中的所有的请求都返回json数据结构-->
        <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
            <property name="supportedMediaTypes" value="application/json"/>
            <property name="features">
                <list>
                    <!--Map类型格式化,接收参数允许空值-->
                     <value>WriteMapNullValue</value>

                    <!-- 字段如果为null,输出为"",而非null -->
                    <!-- <value>WriteNullStringAsEmpty</value>-->

                    <!--日期类型格式化  数值15..... 毫秒级的时间戳
                    WriteDateUseDateFormat yyyy-MM-dd hh:mm:ss-->
                    <value>WriteDateUseDateFormat</value>

                    <!--使用该配置的时候,要注意是否存在循环依赖的情况。-->
                    <value>DisableCircularReferenceDetect</value>
                </list>
            </property>
        </bean>
    </mvc:message-converters>
</mvc:annotation-driven>
posted @ 2021-01-25 18:40  笨蛋树上笨蛋果  阅读(220)  评论(0编辑  收藏  举报