当前位置: 首页 > article >正文

Spring Boot项目升级FastJson2踩坑记:三个依赖缺一不可,附完整配置代码

Spring Boot项目升级FastJson2实战指南从依赖管理到配置优化最近在重构一个老项目时我决定将FastJson1升级到FastJson2版本。本以为只是简单修改下依赖版本号就能搞定结果却遭遇了各种类找不到的报错。经过两天折腾和源码研究终于摸清了FastJson2的模块化设计思路也总结出一套可靠的升级方案。1. 为什么FastJson2需要三个依赖FastJson2相比1.x版本最大的变化就是采用了模块化设计。官方将不同功能拆分成独立模块这种设计带来了更好的灵活性和更小的依赖体积但也让升级过程变得不那么直观。1.1 核心模块解析FastJson2的三个必要依赖各司其职fastjson2核心功能模块提供基础的JSON解析和生成能力fastjson2-extension扩展功能模块包含各种高级特性支持fastjson2-extension-spring6Spring专用适配器提供与Spring框架的深度集成!-- 必须同时引入这三个依赖 -- dependency groupIdcom.alibaba.fastjson2/groupId artifactIdfastjson2/artifactId version2.0.49/version /dependency dependency groupIdcom.alibaba.fastjson2/groupId artifactIdfastjson2-extension/artifactId version2.0.49/version /dependency dependency groupIdcom.alibaba.fastjson2/groupId artifactIdfastjson2-extension-spring6/artifactId version2.0.49/version /dependency提示三个依赖的版本号必须保持一致否则可能出现兼容性问题1.2 常见缺失依赖的症状当缺少某个依赖时通常会遇到以下错误缺少fastjson2-extensionFastJsonConfig类找不到缺少fastjson2-extension-spring6FastJsonHttpMessageConverter类找不到缺少fastjson2基础JSON功能无法使用2. 配置类迁移指南从FastJson1升级到FastJson2配置类需要做多处调整。下面是一个完整的配置示例import com.alibaba.fastjson2.support.config.FastJsonConfig; import com.alibaba.fastjson2.support.spring6.http.converter.FastJsonHttpMessageConverter; Configuration public class WebMvcConfig implements WebMvcConfigurer { Override public void configureMessageConverters(ListHttpMessageConverter? converters) { FastJsonHttpMessageConverter converter new FastJsonHttpMessageConverter(); // 配置FastJson FastJsonConfig config new FastJsonConfig(); config.setDateFormat(yyyy-MM-dd HH:mm:ss); config.setCharset(StandardCharsets.UTF_8); // 配置序列化特性 config.setWriterFeatures( JSONWriter.Feature.WriteMapNullValue, JSONWriter.Feature.PrettyFormat ); // 配置反序列化特性 config.setReaderFeatures( JSONReader.Feature.FieldBased, JSONReader.Feature.SupportArrayToBean ); converter.setFastJsonConfig(config); converter.setSupportedMediaTypes(Collections.singletonList(MediaType.APPLICATION_JSON)); converters.add(0, converter); // 添加到首位 } }2.1 关键变更点对比配置项FastJson1FastJson2包路径com.alibaba.fastjsoncom.alibaba.fastjson2消息转换器类FastJsonHttpMessageConverterFastJsonHttpMessageConverter(位于spring6模块)配置类FastJsonConfigFastJsonConfig(位于extension模块)特性配置SerializerFeatureJSONWriter.Feature日期格式同FastJson2同FastJson13. 高级配置技巧3.1 自定义序列化规则FastJson2提供了更灵活的序列化控制FastJsonConfig config new FastJsonConfig(); // 配置全局命名策略 config.setPropertyNamingStrategy(PropertyNamingStrategy.SnakeCase); // 配置自定义序列化器 config.setWriterFilters(new ValueFilter() { Override public Object apply(Object object, String name, Object value) { if (value instanceof Date) { return ((Date) value).getTime(); } return value; } });3.2 性能优化建议复用配置对象FastJsonConfig是线程安全的建议作为单例使用合理选择特性不必要的特性会增加性能开销启用ASM加速FastJson2默认启用无需额外配置// 最佳实践配置示例 FastJsonConfig config new FastJsonConfig(); config.setWriterFeatures( JSONWriter.Feature.WriteMapNullValue, // 需要时才开启 JSONWriter.Feature.WriteBigDecimalAsPlain );4. 常见问题解决方案4.1 日期格式化问题FastJson2对日期的处理更加严格// 明确指定日期格式 config.setDateFormat(yyyy-MM-dd HH:mm:ss); // 或者使用时间戳 config.setWriterFeatures(JSONWriter.Feature.WriteDateUseTimestamp);4.2 循环引用处理// 启用循环引用检测 config.setWriterFeatures(JSONWriter.Feature.ReferenceDetection); // 或者禁用循环引用检测(性能更好) config.setWriterFeatures(JSONWriter.Feature.NotWriteDefaultValue);4.3 与Spring Boot的版本兼容性不同Spring Boot版本对应的依赖Spring Boot版本推荐FastJson2模块Spring Boot 3.xfastjson2-extension-spring6Spring Boot 2.xfastjson2-extension-spring55. 迁移后的验证与测试升级完成后建议进行以下验证基础功能测试简单对象序列化/反序列化集合类型处理日期时间处理性能对比使用相同数据集对比序列化速度检查内存占用情况边缘案例测试大整数处理特殊字符处理空值处理// 测试用例示例 Test public void testSerialization() { User user new User(); user.setName(测试); user.setCreateTime(new Date()); String json JSON.toJSONString(user); User parsed JSON.parseObject(json, User.class); assertEquals(user.getName(), parsed.getName()); }在实际项目中我建议先在一个非核心模块进行升级验证确认无误后再全量升级。同时保留回滚方案以防出现不可预期的问题。

相关文章:

Spring Boot项目升级FastJson2踩坑记:三个依赖缺一不可,附完整配置代码

Spring Boot项目升级FastJson2实战指南:从依赖管理到配置优化 最近在重构一个老项目时,我决定将FastJson1升级到FastJson2版本。本以为只是简单修改下依赖版本号就能搞定,结果却遭遇了各种"类找不到"的报错。经过两天折腾和源码研…...

超全 PS 快捷键汇总!新手一键收藏终身受用

对于经常使用Photoshop修图、做设计的小伙伴来说,最影响效率的从来不是创意不足,而是频繁点击菜单栏找功能。明明几秒就能完成的操作,却因为不熟悉工具,反复查找按钮、低效操作,大大拖慢修图节奏。熟练掌握PS快捷键&am…...

从Halcon助手到你的程序:手把手教你将HSmartWindow中的ROI区域‘抠’出来并用起来

从Halcon助手到C#程序:ROI区域的高效迁移与应用实战 在工业视觉开发中,ROI(Region of Interest)的交互式调整是核心痛点之一。许多开发者习惯在Halcon助手中反复调试ROI参数,却苦于无法将这些精心调整的区域无缝迁移到…...

Temu 运营进阶之路 工具选型与凌风体系分析

TEMU商家体量持续扩张,平台规则与收费体系愈发复杂,纯人工运营耗时费力,核算误差、合规疏漏问题频发。市面上运营工具繁杂,商家难以甄别适配工具。本文以行业实操角度,客观拆解凌风工具箱的适配能力与实用价值&#xf…...

深度实战:如何利用7zip引擎实现加密压缩包密码暴力破解

深度实战:如何利用7zip引擎实现加密压缩包密码暴力破解 【免费下载链接】ArchivePasswordTestTool 利用7zip测试压缩包的功能 对加密压缩包进行自动化测试密码 项目地址: https://gitcode.com/gh_mirrors/ar/ArchivePasswordTestTool 在数字资产管理中&#…...

ElevenLabs支持贵州话吗?2024最新实测结果+3种绕过官方限制的合规接入方案

更多请点击: https://codechina.net 第一章:ElevenLabs对贵州话的原生支持现状与底层语音技术解析 ElevenLabs当前官方模型库中尚未提供针对贵州话(含贵阳话、遵义话等主要方言变体)的独立语言选项或预训练语音模型。其公开支持的…...

Verilator仿真保姆级避坑指南:从安装最新版到用GTKWave看波形的完整流程

Verilator仿真实战手册:从源码编译到波形调试的深度解析 1. 为什么选择Verilator:开源EDA工具链的新选择 在数字电路设计领域,仿真验证环节往往决定着项目成败。传统商业仿真器虽然功能强大,但高昂的授权费用和复杂的配置流程让许…...

ARM TRBMAR_EL1寄存器解析与调试实践

1. ARM TRBMAR_EL1寄存器深度解析在ARMv8/v9架构的调试子系统中,TRBMAR_EL1(Trace Buffer Memory Attribute Register)是一个关键的控制寄存器,专门用于管理Trace Buffer单元对内存的访问特性。作为一位长期从事ARM架构底层开发的…...

抓包实战:用Wireshark深度解析ENSP中VxLAN静态隧道的封装过程

抓包实战:用Wireshark深度解析ENSP中VxLAN静态隧道的封装过程 当你第一次在Wireshark中看到VxLAN报文时,是否曾被那层层嵌套的协议头搞得一头雾水?本文将带你亲历一次完整的VxLAN报文"解剖"过程,通过ENSP实验环境中的真…...

G-Helper终极指南:华硕笔记本轻量控制中心的3步快速配置方案

G-Helper终极指南:华硕笔记本轻量控制中心的3步快速配置方案 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Zenbo…...

Windows系统下Opensmile 3.0保姆级安装配置指南(含PATH环境变量设置与常见错误排查)

Windows系统下Opensmile 3.0保姆级安装配置指南(含PATH环境变量设置与常见错误排查) 引言 当你第一次接触语音特征提取工具时,Opensmile无疑是一个强大而友好的选择。作为一款开源的音频分析工具,它广泛应用于情感计算、语音识别等…...

用MATLAB手把手仿真超外差混频:从160MHz射频到40MHz中频的完整信号处理流程

MATLAB实战:超外差混频从160MHz射频到40MHz中频的工程级仿真指南 在无线通信系统设计中,超外差接收机架构因其优异的灵敏度和选择性,至今仍是射频前端的主流方案。本文将带您用MATLAB完整复现这一经典结构中的混频与滤波过程,特别…...

Google Project Zero披露Pixel 10零点击漏洞利用链,仅两漏洞实现完整攻击路径

近日,Google Project Zero团队披露针对Pixel 10的零点击(0 - click)漏洞利用链,仅用两个漏洞就实现了从零点击上下文到Android root的完整攻击路径。研究背景此前Project Zero曾发布针对Pixel 9的漏洞利用链,因其中Dol…...

YAML | The Norway Problem

注:本文为 “YAML | The Norway Problem” 相关合辑。 英文引文,机翻未校。 略作重排,如有内容异常,请看原文。 The Norway Problem - why StrictYAML refuses to do implicit typing and so should you 挪威问题 - 为什么 Stric…...

EVE-NG抓包踩坑实录:手把手教你配置Wireshark wrapper.bat,解决密码错误报错

EVE-NG抓包故障深度解析:从密码错误到Wireshark完美联动的全流程指南 在虚拟网络实验室的构建中,EVE-NG无疑是工程师们的首选平台。然而当我们需要进行深度报文分析时,Wireshark与EVE-NG的联动配置却常常成为技术道路上的"拦路虎"…...

谷歌泄露Chromium未修复漏洞细节,数万用户或面临远程代码执行风险

Chromium漏洞泄露:从发现到“修复”的漫长历程 2022年12月,安全研究员Lyra Rebane报告了Chromium中一个未修复的漏洞,该漏洞会导致JavaScript在浏览器关闭后仍在后台运行,允许在设备上执行远程代码,此问题随后被确认为…...

从零构建Sora 2-UE5.4可信工作流:基于IEEE 1872标准的生成内容元数据注入方案(附GitHub认证仓库)

更多请点击: https://intelliparadigm.com 第一章:从零构建Sora 2-UE5.4可信工作流:基于IEEE 1872标准的生成内容元数据注入方案(附GitHub认证仓库) 核心目标与标准对齐 本工作流严格遵循 IEEE P1872™(O…...

精准数字化管控赋能医养融合

随着医养结合成为养老行业发展核心趋势,传统医养管理模式存在数据割裂、健康监测滞后、服务台账杂乱、管控统筹困难等问题,难以适配现代化康养机构运营需求。智慧养老医养管理数据大屏,聚焦医养融合核心场景,整合医疗健康与养老服…...

MCP模型控制平面:AI自动化系统的可观察、可治理底座

1. 项目概述:MCP到底是什么,它凭什么被称为AI自动化的“金钥匙”“MCP——The Golden Key for AI Automation”这个标题一出来,很多刚接触AI工程化的朋友第一反应是:又一个新造词?听着像营销话术。但我在过去三年里&am…...

跨越语言障碍:为MASA模组系列打造专业级中文体验解决方案

跨越语言障碍:为MASA模组系列打造专业级中文体验解决方案 【免费下载链接】masa-mods-chinese 一个masa mods的汉化资源包 项目地址: https://gitcode.com/gh_mirrors/ma/masa-mods-chinese 在Minecraft的模组生态系统中,MASA系列模组以其强大的功…...

trae 提示 测到模型循环,请求已被中断。请重试或新建任务。怎么处理?

这个提示是 Trae 的防死循环保护机制,核心原因是:模型陷入了「重复执行无效操作 → 无法推进任务 → 又重复执行」的循环,系统主动中断请求,避免资源浪费和任务卡死。下面给你拆解常见原因和对应的解决办法,按从高到低…...

终极指南:如何快速构建中文手写识别AI系统(免费数据集)

终极指南:如何快速构建中文手写识别AI系统(免费数据集) 【免费下载链接】Traditional-Chinese-Handwriting-Dataset Open source traditional chinese handwriting dataset. 项目地址: https://gitcode.com/gh_mirrors/tr/Traditional-Chin…...

NotebookLM显著性判断失效真相:92%用户忽略的3个统计学前提及实时校验脚本

更多请点击: https://codechina.net 第一章:NotebookLM显著性判断失效的典型现象与影响评估 NotebookLM 在处理多源异构文档时,其内置的“显著性判断”模块(Significance Scorer)常因语义稀疏、上下文截断或引用锚点偏…...

ARMv8 AArch32调试异常机制与断点技术详解

1. AArch32调试异常架构解析在ARMv8架构的AArch32执行状态下,调试异常机制为开发者提供了强大的程序控制能力。这套机制通过硬件断点和软件断点指令(BKPT)实现对程序执行流的精确控制,其核心设计哲学体现在三个层面:异…...

从NPN到FET:一文看懂LDO内部调整管的演进史,以及如何根据你的项目(IoT、可穿戴、汽车电子)选择最优架构

从NPN到FET:LDO调整管技术演进与选型实战指南 在可穿戴设备的心率传感器突然断电的瞬间,工程师们才意识到选错LDO的代价——这恰恰揭示了调整管架构对系统可靠性的决定性影响。从早期笨重的NPN稳压器到如今纳米级MOSFET LDO,电源管理芯片的进…...

保姆级教程:在Ubuntu 22.04上从源码编译RISC-V SPIKE模拟器(含libboost报错解决)

从零构建RISC-V开发环境:Ubuntu 22.04下SPIKE模拟器深度编译指南 当第一次接触RISC-V生态时,搭建可靠的开发环境往往成为新手面临的第一个挑战。作为RISC-V官方推荐的指令集模拟器,SPIKE以其轻量级和准确性成为学习RISC-V架构的理想工具。本文…...

量子近似优化算法(QAOA)原理与实践指南

1. 量子近似优化算法(QAOA)基础解析 量子近似优化算法(QAOA)是近年来量子计算领域最具应用前景的混合算法之一。作为一名长期从事量子算法研究的工程师,我见证了QAOA从理论构想到实际应用的完整发展历程。这种算法巧妙地将经典优化技术与量子线路相结合,…...

PaddleOCR车牌识别实战:从3万张数据集处理到模型训练部署的完整避坑指南

PaddleOCR车牌识别实战:从3万张数据集处理到模型训练部署的完整避坑指南 车牌识别作为计算机视觉领域的经典应用场景,在智慧交通、安防监控、停车场管理等行业有着广泛需求。PaddleOCR作为国内领先的OCR开源框架,凭借其优异的性能和丰富的预训…...

FSearch技术深度解析:如何用C语言和GTK3实现毫秒级文件搜索

FSearch技术深度解析:如何用C语言和GTK3实现毫秒级文件搜索 【免费下载链接】fsearch A fast file search utility for Unix-like systems based on GTK3 项目地址: https://gitcode.com/gh_mirrors/fs/fsearch 在Linux生态系统中,文件搜索一直是…...

Ender-3固件配置终极指南:5步简单快速性能优化

Ender-3固件配置终极指南:5步简单快速性能优化 【免费下载链接】Ender-3 The Creality3D Ender-3, a fully Open Source 3D printer perfect for new users on a budget. 项目地址: https://gitcode.com/gh_mirrors/en/Ender-3 Ender-3固件配置是解锁3D打印机…...