springboot整合redis存入一个对象时报错:org.springframework.data.redis.serializer.SerializationException: Cannot
org.springframework.data.redis.serializer.SerializationException: Cannot serialize; nested exception is org.springframework.core.serializer.support.SerializationFailedException: Failed to serialize object using DefaultSerializer; nested exception is java.lang.IllegalArgumentException: DefaultSerializer requires a Serializable payload but received an object of type [com.tang.pojo.User]
这是因为redis要求存入的对象必须序列化,不然会报没有序列化的错误。如下图,就是没有序列化的对象。
我们只需要继承一个接口就能实现对象序列化了
这样就不会报错了。
springboot整合redis默认使用的是jdk序列化,不管是键还是值都是jdk序列化,我们要自己定义一个RedisTemplate,改成json序列化。不然在控制台查看redis的内容会有乱码,如下所示:
更改序列化规则之后,控制台就没有乱码了,如图:
如何更改序列化规则呢?我们只需要定义一个自己的RedisConfig,然后在里面定义自己的RedisTemplate即可:
@Configuration
public class RedisConfig {
// 自定义redisTemplate
@Bean
@SuppressWarnings("all")
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
//我们为了开发方方便,一般使用<String, Object>
RedisTemplate<String, Object> template = new RedisTemplate();
template.setConnectionFactory(redisConnectionFactory);
// 进行序列化配置
// 1. json序列化
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
// 2. String序列化
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
// key采用String的方式序列化,value采用json格式
template.setKeySerializer(stringRedisSerializer);
template.setValueSerializer(jackson2JsonRedisSerializer);
// hash的key也采用String的方式序列化,value采用json格式
template.setHashKeySerializer(stringRedisSerializer);
template.setHashValueSerializer(jackson2JsonRedisSerializer);
template.afterPropertiesSet();
return template;
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了