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

记一次 Spring Boot 3 + Redis 序列化 LocalDateTime 的踩坑与填坑

最近在开发一个基于 Spring Boot 3 的商城项目时,需要将查询到的商品列表存入 Redis 缓存。商品实体类Product中包含一个java.time.LocalDateTime类型的createdAt字段,用于记录创建时间。

本以为这是一个非常常规的操作,没想到却遇到了一个经典的序列化异常。

当代码执行到redisTemplate.opsForValue().set(...)时,程序直接抛出了异常,控制台打印了长长的堆栈信息。核心错误如下:

org.springframework.data.redis.serializer.SerializationException: Could not write JSON: Java 8 date/time type `java.time.LocalDateTime` not supported by default: add Module "com.fasterxml.jackson.datatype:jackson-datatype-jsr310" to enable handling ... Caused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Java 8 date/time type `java.time.LocalDateTime` not supported by default

错误信息非常明确:Jackson 在默认情况下不支持java.time.LocalDateTime类型的序列化,并提示我们需要添加jackson-datatype-jsr310模块。

  1. 检查依赖

<dependency> <groupId>com.fasterxml.jackson.datatype</groupId> <artifactId>jackson-datatype-jsr310</artifactId> </dependency>

首先,我检查了pom.xml文件。发现spring-boot-starter-json依赖中已经包含了jackson-datatype-jsr310。这说明依赖是存在的,问题不在于缺少 jar 包。

2.检查 Redis 配置
既然依赖没问题,那问题很可能出在 Redis 的序列化配置上。我检查了项目中的RedisConfig配置类,发现确实手动配置了RedisTemplate

这是最初有问题的代码:

@Bean public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) { // 配置 Key 的序列化器 StringRedisSerializer keySerializer = new StringRedisSerializer(); // 配置 Value 的序列化器 // ❌ 错误点:这里直接 new 了一个新的 ObjectMapper,它没有注册 JavaTimeModule GenericJackson2JsonRedisSerializer valueSerializer = new GenericJackson2JsonRedisSerializer(); RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>(); redisTemplate.setConnectionFactory(connectionFactory); redisTemplate.setKeySerializer(keySerializer); redisTemplate.setValueSerializer(valueSerializer); return redisTemplate; }
解决方案

解决思路很简单:我们需要手动创建一个ObjectMapper,并显式地向其中注册JavaTimeModule,然后将这个配置好的ObjectMapper传递给GenericJackson2JsonRedisSerializer

package com.haina.mall.config; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer; import org.springframework.data.redis.serializer.StringRedisSerializer; @Configuration public class RedisConfig { @Bean public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) { // 1. 配置 Key 的序列化器 StringRedisSerializer keySerializer = new StringRedisSerializer(); // 2. 配置 Value 的序列化器 (核心修改在这里) ObjectMapper mapper = new ObjectMapper(); // ✅ 关键一步:注册 Java 8 时间模块 mapper.registerModule(new JavaTimeModule()); // 使用我们配置好的 ObjectMapper 来创建序列化器 GenericJackson2JsonRedisSerializer valueSerializer = new GenericJackson2JsonRedisSerializer(mapper); // 3. 创建并配置 RedisTemplate RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>(); redisTemplate.setConnectionFactory(connectionFactory); redisTemplate.setKeySerializer(keySerializer); redisTemplate.setValueSerializer(valueSerializer); // 建议:也设置一下 Hash 的 Key 和 Value 序列化器,避免存取 Hash 类型数据时出现问题 redisTemplate.setHashKeySerializer(keySerializer); redisTemplate.setHashValueSerializer(valueSerializer); return redisTemplate; } }

ok啦老铁

http://www.jsqmd.com/news/1326538/

相关文章:

  • 7种Agent核心设计模式,小白也能轻松入门大模型学习之旅
  • MySQL 8.0与Navicat安装配置全指南:从零搭建高效数据库开发环境
  • 做会议纪要神器app哪个更靠谱?听脑AI vs 通义听悟专业对比 - AI办公提效专家
  • 2026蚂蚁财税公司注册专业吗 十大综合** 备婚新人精选攻略不踩雷 - 工业推荐榜
  • 《Obduction》VR适配:社区驱动开发与虚幻引擎3移植实践
  • ModOrganizer2:游戏模组管理的终极解决方案与虚拟文件系统技术
  • Python爬虫实战:应对IP封禁与反爬机制的完整解决方案
  • 武汉中频音响灯光:音视频总包工程的专业解析 - 精彩城市
  • CSP-S初赛C++考点解析与算法优化技巧
  • AI数学求解工具部署与测试指南:从环境搭建到效果验证
  • 如何快速将QQ音乐加密格式转换为MP3:QMCFLAC2MP3完整指南
  • 终极指南:如何在PC上完美运行Switch游戏?yuzu模拟器完整教程
  • Video2X:基于机器学习的视频超分辨率与帧插值框架技术解析
  • 小白程序员必看:轻松入门大模型,从零到落地实践全解析
  • COMSOL远场偏振计算技术解析与应用实践
  • 低配服务器优化:2核2G稳定运行10个WordPress站点
  • 2026成都生鲜耗材供应厂家甄选:保鲜膜与生鲜包装袋的优质货源解析 - 卓企推荐
  • Docker容器化部署Oracle 19c数据库:从环境搭建到生产实践全指南
  • IPXWrapper终极指南:三步让经典Windows游戏重获联机能力
  • 2026铝单板制造厂口碑推荐,十大品牌综合实力横评不踩雷 - 工业推荐榜
  • 5分钟配置!抖音批量下载终极指南:无水印保存与自动化工具实战
  • P2G与碳捕集系统在微电网中的建模与调度优化
  • 【工程实战】高寒地区专网通信组网痛点、技术选型与标准化落地全流程
  • Siri AI收费背后:iOS开发者如何应对AI Agent时代的技术变革
  • Diablo Edit2完全指南:打造你的专属暗黑破坏神2角色编辑器
  • 前端小白也能掌握:收藏这份Agent开发进阶指南,解锁大模型时代新机遇!
  • 冲击肿瘤生存类高分 SCI 的“方法学门面三件套“:RMST 阴影图 + Landmark HR 曲线 + 条件生存 n
  • 不停产、不大拆!真空泵轴承位磨损抢修技术答疑
  • 终极Windows和Office激活方案:5分钟掌握KMS智能激活技术
  • 2026年美团商家开户避坑指南:五大服务商实战测评,附**合作渠道和报价对比 - 品牌报告