zoukankan      html  css  js  c++  java
  • 使用FastJSON转换对象是出现$ref(循环引用)

    原因:当开启FastJson的“循环引用检测”特性时,如果生成的多个JSON对象中同时引用了同一个对象数据,则在第一个JSON对象中会正常加载被引用的对象数据,但是在随后其他的JSON对象中则不会再次加载被引用的对象数据,而是通过"$ref"的方式指向第一个JSON对象中该对象数据的内存位置。

    解决:两种方案,一是在一对多的情况下,在@onetomany的位置添加@JSONField(serialize = false) 注解,在此不详细介绍,具体参考下面的博文;二是关闭FastJson的循环引用检测特性,但是可能会导致stackoverflow,有两种方式。

    (1)配置文件方式

    <mvc:annotation-driven>
            <mvc:message-converters register-defaults="true">
                <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
                    <property name="supportedMediaTypes">
                        <list>
                            <value>text/html;charset=UTF-8</value>
                            <value>application/json</value>
                        </list>
                    </property>
                    <property name="features">
                        <list>
                            <value>WriteMapNullValue</value>
                            <value>QuoteFieldNames</value>
                            <value>WriteDateUseDateFormat</value>
                            <value>DisableCircularReferenceDetect</value>
                        </list>
                    </property>
                </bean>
            </mvc:message-converters>
        </mvc:annotation-driven>

    (2)参数方式

    String jsonString = JSON.toJSONString(map, SerializerFeature.DisableCircularReferenceDetect);
    System.out.println(jsonString);

    参考:https://www.cnblogs.com/zhujiabin/p/6132951.html

               http://blog.csdn.net/weixiaodedao/article/details/51790790

  • 相关阅读:
    ios上input的focus()、autofocus无效
    Object.assign()
    解决vue build后不兼容IOS11以下版本,并清理index缓存
    JavaScript常用方法
    mui-picker 增加过滤
    安装node-sass提示没有vendor目录的解决办法
    Base64编码
    object排序
    JSON数组去重
    vdom
  • 原文地址:https://www.cnblogs.com/xieegai/p/8531273.html
Copyright © 2011-2022 走看看