SpringBoot项目在获取Redis中的数据时候报错:
org.springframework.data.redis.serializer.SerializationException: Could not Read JSON
如上图为具体报错,很清楚无法读取JSON
问题排查过程:
- 打开断点 调用方法查看相关参数是否正常
- 查看yml中的redis配置
- 查看RedisConfig文件(问题出现在这个文件里)
RedisConfig文件是用来配置 redisTemplate
图上问题有两种解决办法:
- 使用StringRedisTemplate(大家可以去了解一下,我没有使用这种方式)
- 第二种方式就是修改序列化方式
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;
以上便是解决办法。
每天进步一点点! 加油