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

}

版权声明:本文为qq_47188967原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。