我们在创建权限树的时候,经常会存在子节点,这时候就会出现循环引用,如果在使用 fastjson 的时候,没有做特殊的处理,那么返回给前端的 json 里面会出现"$ref"。前端是不能解析这个的,那我们后台必须要进行处理。
使用框架版本:springmvc4.1.6.RELEASE fastjson1.2.23
java 代码:
public class TreeNodeVo implements Serializable{
private static final long serialVersionUID = -1052589348626068068L;
private String text;//描述
private String id;//表id
private List<TreeNodeVo> children;//子节点
private String icon="none";
private TreeStateVo state;
get/set方法省略
}
spring-mvc.xml 配置:
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
<value>application/json;charset=UTF-8</value>
</list>
</property>
<property name="fastJsonConfig" ref="fastJsonConfig" />
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
<bean id="fastJsonConfig" class="com.alibaba.fastjson.support.config.FastJsonConfig">
<property name="charset" value="UTF-8" />
<property name="serializerFeatures">
<list>
<value>DisableCircularReferenceDetect</value>
</list>
</property>
</bean>
<bean id="DisableCircularReferenceDetect" class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean">
<property name="staticField" value="com.alibaba.fastjson.serializer.SerializerFeature.DisableCircularReferenceDetect"/>
</bean>
如果你是直接使用代码转 json 的,那么你看下面的代码:
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
SerializerFeature feature = SerializerFeature.DisableCircularReferenceDetect;
byte[] bytes = JSON.toJSONBytes(maps,feature);
是不是很简单,循环引用的问题解决了。
如有写的不对的地方,请大家指出来。
再次感谢大家耐心的看完我的博客。希望对你有帮助。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于