SpringBoot项目在获取Redis中的数据时候报错:

org.springframework.data.redis.serializer.SerializationException: Could not Read JSON
报错信息
如上图为具体报错,很清楚无法读取JSON
问题排查过程:

  1. 打开断点 调用方法查看相关参数是否正常
  2. 查看yml中的redis配置
  3. 查看RedisConfig文件(问题出现在这个文件里)

RedisConfig文件是用来配置 redisTemplate

图上问题有两种解决办法:
  1. 使用StringRedisTemplate(大家可以去了解一下,我没有使用这种方式)
  2. 第二种方式就是修改序列化方式
 RedisTemplate<String, T> template = new RedisTemplate<>();

        // 配置连接工厂
        template.setConnectionFactory(factory);

        //使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值(默认使用JDK的序列化方式)
        Jackson2JsonRedisSerializer<Object> jacksonSerializer = new Jackson2JsonRedisSerializer<>(Object.class);

        ObjectMapper om = new ObjectMapper();
        // 指定要序列化的域,field,get和set,以及修饰符范围,ANY是都有包括private和public
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        om.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);
        jacksonSerializer.setObjectMapper(om);

        // 值采用json序列化  **在这里修改呀!!!!!!**
        // 原本:template.setValueSerializer(jacksonSerializer);
        template.setValueSerializer(new StringRedisSerializer());
//        template.setValueSerializer(jacksonSerializer);
        // 使用StringRedisSerializer来序列化和反序列化redis的key值
        template.setKeySerializer(new StringRedisSerializer());

        // 设置hash key 和value序列化模式
        template.setHashKeySerializer(new StringRedisSerializer());
        template.setHashValueSerializer(jacksonSerializer);
        template.afterPropertiesSet();

        log.info("RedisTemplateConfig init end");
        return template;

以上便是解决办法。
每天进步一点点! 加油

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐