详解在springmvc中解决FastJson循环引用的问题

发布时间 - 2026-01-10 22:45:37    点击率:

我们先来看一个例子:

package com.elong.bms; 
 
import java.io.OutputStream; 
import java.util.HashMap; 
import java.util.Map; 
 
import com.alibaba.fastjson.JSON; 
 
public class Test { 
 public static void main(String[] args) { 
 Map<String, Student> maps = new HashMap<String, Student>(); 
 Student s1 = new Student("s1", 16); 
 
 maps.put("s1", s1); 
 maps.put("s2", s1); 
 
 byte[] bytes = JSON.toJSONBytes(maps); 
 
 System.out.println(new String(bytes)); 
 } 
} 

输出:

{"s1":{"age":16,"name":"s1"},"s2":{"$ref":"$.s1"}} 

可以看到,这个json如果发到前端是无法使用的,幸好FastJson提供了解决办法,我们来看下,解决办法为禁用循环引用检测,代码如下:

package com.elong.bms; 
 
import java.io.OutputStream; 
import java.util.HashMap; 
import java.util.Map; 
 
import com.alibaba.fastjson.JSON; 
import com.alibaba.fastjson.serializer.SerializerFeature; 
 
public class Test { 
 public static void main(String[] args) { 
 Map<String, Student> maps = new HashMap<String, Student>(); 
 Student s1 = new Student("s1", 16); 
 
 maps.put("s1", s1); 
 maps.put("s2", s1); 
  
 SerializerFeature feature = SerializerFeature.DisableCircularReferenceDetect; 
 
 byte[] bytes = JSON.toJSONBytes(maps,feature); 
 
 System.out.println(new String(bytes)); 
 } 
} 

输出如下:

{"s1":{"age":16,"name":"s1"},"s2":{"age":16,"name":"s1"}} 

问题是如果我们在spring mvc中使用的时候,需要将SerializerFeature注入到MessageConverter里面, FastJsonHttpMessageConverter

但是SerializerFeature是一个enum类型的,又是一个array,考虑到大部分人对这个不熟悉,直接上代码了。

<bean id="jsonConverter" 
  class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter"> 
  <property name="supportedMediaTypes" value="application/json;charset=UTF-8"/> 
  <property name="features"> 
  <array value-type="com.alibaba.fastjson.serializer.SerializerFeature"> 
   <value>DisableCircularReferenceDetect</value> 
  </array> 
  </property> 
 </bean> 
 <bean id="DisableCircularReferenceDetect" class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean"> 
  <property name="staticField" value="com.alibaba.fastjson.serializer.SerializerFeature.DisableCircularReferenceDetect"></property> 
 </bean> 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# springmvc  # fastjson  # fastjson循环引用  # Springmvc基于fastjson实现导包及配置文件  # springMVC利用FastJson接口返回json数据相关配置详解  # springmvc fastjson 反序列化时间格式化方法(推荐)  # SpringMVC集成FastJson使用流程详解  # 解决办法  # 是一个  # 又是  # 可以看到  # 问题是  # 考虑到  # 人对  # 不熟悉  # 大家多多  # lt  # args  # gt  # Student  # String  # static  # Test  # main  # void  # bytes  # byte 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 手机网站制作与建设方案,手机网站如何建设?  Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】  laravel怎么在请求结束后执行任务(Terminable Middleware)_laravel Terminable Middleware请求结束任务执行方法  网页设计与网站制作内容,怎样注册网站?  北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?  宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法  VIVO手机上del键无效OnKeyListener不响应的原因及解决方法  在Oracle关闭情况下如何修改spfile的参数  Laravel如何实现用户角色和权限系统_Laravel角色权限管理机制  Claude怎样写约束型提示词_Claude约束提示词写法【教程】  Swift中swift中的switch 语句  Laravel怎么为数据库表字段添加索引以优化查询  如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环  如何快速生成ASP一键建站模板并优化安全性?  百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧  canvas 画布在主流浏览器中的尺寸限制详细介绍  Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】  谷歌浏览器如何更改浏览器主题 Google Chrome主题设置教程  Android滚轮选择时间控件使用详解  Laravel如何配置任务调度?(Cron Job示例)  Laravel如何优化应用性能?(缓存和优化命令)  如何用美橙互联一键搭建多站合一网站?  如何快速启动建站代理加盟业务?  Laravel用户密码怎么加密_Laravel Hash门面使用教程  Laravel如何实现多语言支持_Laravel本地化与国际化(i18n)配置教程  Laravel策略(Policy)如何控制权限_Laravel Gates与Policies实现用户授权  javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】  jQuery中的100个技巧汇总  Laravel Debugbar怎么安装_Laravel调试工具栏配置指南  Laravel怎么上传文件_Laravel图片上传及存储配置  Laravel如何使用Telescope进行调试?(安装和使用教程)  Laravel如何处理CORS跨域请求?(配置示例)  Laravel DB事务怎么使用_Laravel数据库事务回滚操作  Laravel怎么配置.env环境变量_Laravel生产环境敏感数据保护与读取【方法】  魔方云NAT建站如何实现端口转发?  Laravel API资源类怎么用_Laravel API Resource数据转换  Laravel的.env文件有什么用_Laravel环境变量配置与管理详解  如何用PHP快速搭建CMS系统?  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  php 三元运算符实例详细介绍  瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口  Java解压缩zip - 解压缩多个文件或文件夹实例  Windows11怎样设置电源计划_Windows11电源计划调整攻略【指南】  高防服务器租用指南:配置选择与快速部署攻略  Laravel如何处理异常和错误?(Handler示例)  LinuxShell函数封装方法_脚本复用设计思路【教程】  如何为不同团队 ID 动态生成多个“认领值班”按钮  Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置  Laravel路由Route怎么设置_Laravel基础路由定义与参数传递规则【详解】  如何快速重置建站主机并恢复默认配置?