Redis反序列化ArticleZSet列表遇Unexpected token错误求解决方案
问题分析与修复方案
问题根源
从错误信息可以明确:你配置的RedisTemplate试图把Redis中存储的字符串"3231787"反序列化为ArticleZSet对象,两者完全不匹配。另外你启用了Jackson的WRAPPER_ARRAY类型包裹模式,要求序列化后的JSON是包含类型信息的数组结构(比如["misc.model.auth.article.ArticleZSet", {...}]),但实际Redis里的内容是纯数字字符串,自然触发解析错误。
修复方案
分两种场景处理:
场景1:Redis应该存储完整的ArticleZSet对象
- 检查写入逻辑:确保写入Redis ZSet时使用的是你定义的
redisZSetTemplate,而不是其他模板直接写入了文章ID。 - 清理错误数据:删除Redis中对应ZSet的旧数据,用正确的模板重新写入序列化后的
ArticleZSet对象。
场景2:Redis本来就该存储文章ID(数字)
如果你的业务逻辑是用Redis ZSet存文章ID排序,后续再根据ID查询对象,那需要修改RedisTemplate的配置:
@Bean(name = "redisZSetTemplate") RedisTemplate<String, Long> redisTemplateZSet(RedisConnectionFactory redisConnectionFactory) { RedisTemplate<String, Long> template = new RedisTemplate<>(); template.setConnectionFactory(redisConnectionFactory); template.setEnableTransactionSupport(true); // 用GenericToStringSerializer处理数字类型的序列化/反序列化 template.setValueSerializer(new GenericToStringSerializer<>(Long.class)); template.setKeySerializer(new StringRedisSerializer()); template.setHashKeySerializer(new StringRedisSerializer()); template.setHashValueSerializer(new GenericToStringSerializer<>(Long.class)); template.afterPropertiesSet(); return template; }
之后读取到ID后,再通过ID去查询对应的ArticleZSet对象即可。
内容的提问来源于stack exchange,提问作者Dolphin
相关产品推荐
相关产品推荐

