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;
    }

}
posted @   爱吃雪糕的小布丁  阅读(544)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示