详解在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基础路由定义与参数传递规则【详解】
如何快速重置建站主机并恢复默认配置?

