共计 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>
结果如下:
正文完
发表至: java
2019-05-22