讲师中心 微信公众号

工具推荐

视频效率加速
Seko
Seko

AI短剧一键生成成片

AniShort
AniShort

AI短剧协同制作平台

剧云
剧云

中文短剧剧本制作平台

立刻MV
立刻MV

低成本歌曲 MV、视频生成

在Spring Boot 3中如何配置GenericJackson2JsonRedisSerializer?

云婷酱_7926

云婷酱_7926

发布时间:2026-11-12 07:28:49

|

838人浏览过

|

来源于php中文网

原创

Spring Boot 3中GenericJackson2JsonRedisSerializer不自动生效,因默认RedisTemplate仍用JdkSerializationRedisSerializer;必须显式配置key/value序列化器,否则存入为乱码二进制,取值返回LinkedHashMap而非原类型。

在spring boot 3中如何配置genericjackson2jsonredisserializer?

Spring Boot 3 中直接使用 GenericJackson2JsonRedisSerializer 是可行的,但必须显式配置,否则它不会自动生效;默认的 RedisTemplate 仍会 fallback 到 JdkSerializationRedisSerializer,导致乱码、类型丢失或反序列化失败。

为什么 GenericJackson2JsonRedisSerializer 在 Spring Boot 3 中不自动生效

Spring Boot 3 默认只对 StringRedisTemplate 配置了 StringRedisSerializer,而泛型版的 RedisTemplate<object object></object> 依然使用 JDK 序列化器 —— 这是历史兼容性设计,不是 bug。如果你没手动覆盖 valueSerializer 和 keySerializer,哪怕引入了 Jackson 依赖,存进去的对象也会变成不可读的二进制字节流。

  • GenericJackson2JsonRedisSerializer 不带类型信息,反序列化时默认还原为 LinkedHashMap
  • 它不处理 LocalDateTime、BigDecimal 等非标准类型,需额外注册模块
  • 它和 Jackson2JsonRedisSerializer 的关键区别在于:前者支持泛型擦除后的反序列化(靠写入时记录类名),后者必须在构造时指定具体类型

如何正确配置 GenericJackson2JsonRedisSerializer

你需要在配置类中显式创建 RedisTemplate 实例,并设置其 valueSerializer 为 GenericJackson2JsonRedisSerializer,同时确保 key 使用 StringRedisSerializer(避免 key 也变乱码)。

Expanso yaml-to-json
Expanso yaml-to-json

使用 Expanso Edge 管道将 YAML 输入转换为 JSON 格式。

下载
  • 必须调用 setKeySerializer(new StringRedisSerializer()),否则 key 也会被 JSON 序列化,导致 scan 失效或命令报错
  • 建议搭配 ObjectMapper 注册 JavaTimeModule,否则 LocalDateTime 会抛 JsonMappingException
  • 不要复用同一个 ObjectMapper 实例给多个序列化器,避免线程安全问题或配置污染
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
    RedisTemplate<String, Object> template = new RedisTemplate<>();
    template.setConnectionFactory(connectionFactory);
    template.setKeySerializer(new StringRedisSerializer());
    template.setValueSerializer(new GenericJackson2JsonRedisSerializer());

    ObjectMapper mapper = new ObjectMapper();
    mapper.registerModule(new JavaTimeModule());
    mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
    ((GenericJackson2JsonRedisSerializer) template.getValueSerializer()).setObjectMapper(mapper);

    template.afterPropertiesSet();
    return template;
}

容易踩的坑:反序列化时 ClassCastException 或 null 值

最常见现象是取值后得到 LinkedHashMap 而不是你期望的 User 类型,或者反序列化直接返回 null —— 这通常不是配置遗漏,而是使用方式不对。

  • 用 redisTemplate.opsForValue().get("key") 取出的是 Object,必须显式强转,且仅当存入时用了 GenericJackson2JsonRedisSerializer 才能保类型
  • 如果存入用的是 stringRedisTemplate,取出时却用 redisTemplate,会因序列化器不匹配导致解析失败
  • GenericJackson2JsonRedisSerializer 内部写入 JSON 时会加一个 @class 字段(如 {"@class":"com.example.User","name":"Alice"}),若原始 JSON 来自外部(如 HTTP 请求体),缺少该字段就无法还原类型

替代方案:什么时候该换用 Jackson2JsonRedisSerializer

如果你的操作对象类型固定、已知(比如缓存都是 User 或 Order),Jackson2JsonRedisSerializer<user></user> 比 GenericJackson2JsonRedisSerializer 更轻量、更安全,也不依赖 @class 字段。

  • Jackson2JsonRedisSerializer 构造时指定类型,反序列化严格按该类型执行,无运行时类型推断开销
  • 它不写 @class 字段,JSON 更干净,适合与前端或其他语言系统交互
  • 但无法用于泛型容器(如 List<user></user>),除非你手动包装成 wrapper 类

真正复杂的地方不在怎么配,而在于你是否清楚:这个序列化器决定的是「谁来解释 value 字节流」——一旦选错,Redis 里存的数据就再也无法按预期还原。别依赖 IDE 控制台显示“看着像 JSON”就认为成功了,务必用 redis-cli + get key 直接验证原始内容。

热门AI工具

更多
立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

Flowith
Flowith Hot

Flowith是一款基于画布和智能体工作流的 AI 协作工作空间。

相关专题

更多
spring框架介绍
spring框架介绍

本专题整合了spring框架相关内容,想了解更多详细内容,请阅读专题下面的文章。

2951

2025.08.06

Java Spring Security 与认证授权
Java Spring Security 与认证授权

本专题系统讲解 Java Spring Security 框架在认证与授权中的应用,涵盖用户身份验证、权限控制、JWT与OAuth2实现、跨站请求伪造(CSRF)防护、会话管理与安全漏洞防范。通过实际项目案例,帮助学习者掌握如何 使用 Spring Security 实现高安全性认证与授权机制,提升 Web 应用的安全性与用户数据保护。

517

2026.01.26

js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

4956

2023.06.20

js获取当前时间
js获取当前时间

JS全称JavaScript,是一种具有函数优先的轻量级,解释型或即时编译型的编程语言;它是一种属于网络的高级脚本语言,主要用于Web,常用来为网页添加各式各样的动态功能。js怎么获取当前时间呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1435

2023.07.28

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

1918

2023.08.03

js是什么意思
js是什么意思

JS是JavaScript的缩写,它是一种广泛应用于网页开发的脚本语言。JavaScript是一种解释性的、基于对象和事件驱动的编程语言,通常用于为网页增加交互性和动态性。它可以在网页上实现复杂的功能和效果,如表单验证、页面元素操作、动画效果、数据交互等。

10483

2023.08.17

js删除节点的方法
js删除节点的方法

js删除节点的方法有:1、removeChild()方法,用于从父节点中移除指定的子节点,它需要两个参数,第一个参数是要删除的子节点,第二个参数是父节点;2、parentNode.removeChild()方法,可以直接通过父节点调用来删除子节点;3、remove()方法,可以直接删除节点,而无需指定父节点;4、innerHTML属性,用于删除节点的内容。

1060

2023.09.01

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

3144

2023.09.04

Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

80

2026.11.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
phpEnv手册
phpEnv手册

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn