You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 03:50:39