今天在写代码时发现请求取数时发现部分数据出现乱码现象,如图所示
实体类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>
结果如下: