springmvc中对象转json数据出现ref-问题

37次阅读

共计 1223 个字符,预计需要花费 4 分钟才能阅读完成。

今天在写代码时发现请求取数时发现部分数据出现乱码现象, 如图所示

实体类 A

public class BaseItems{

    private Integer id;
    // 其他属性省略
    private Set<BasePolicy> policys;
}

实体类 B

public class BasePolicy implements java.io.Serializable {

    private Long id;
    private String grade;  // 文件等级
    private String title;// 标题
    private String fileno; // 文号
    private String dispatchDep; // 发文单位
    // 其他属性省略
}

AB 的关系是一对多的关系 , 在查询 a 数据时会把关联的 b 的数据一块查询出来

问题原因: 在对 list 数据 json 序列化时出现循环引用问题, 简单说, 循环引用就是集合 / 对象中的多个元素 / 属性存在相互引用导致循环。

解决方案: 在 spring 配置文件中加入如下代码即可解决

<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> 
                    <value>application/xml;charset=UTF-8</value>  
                </list>
            </property>
            <property name="features">
                <array>
                    <value>DisableCircularReferenceDetect</value>
                </array>
            </property> 
        </bean>
 </mvc:message-converters>
</mvc:annotation-driven>
<!-- 解决使用 fastJson 中出现 $ref 问题 (引用)  -->
<!-- jQuery 这个前端技术无法解析该引用 -->
<!-- 禁用循环引用检测 -->
<bean id="DisableCircularReferenceDetect"
    class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean">
    <property name="staticField"
        value="com.alibaba.fastjson.serializer.SerializerFeature.DisableCircularReferenceDetect">                           
    </property>
</bean>


结果如下:

正文完
 0