org.springframework.data.redis.serializer.SerializationException: Cannot serialize

在做项目的时候遇到一个坑,使用Redis模板类无法持久化自定义类

注入RedisTemplate对象在指定泛型类型的时候不能直接使用@Autowire,要使用@Resource根据名字注入

因为在SpringBoot中,RedisTemplate是自动配置的,相当于容器中有一个默认的RedisTemplate实例,文档中描述如下:

If you add your own @Bean of any of the auto-configured types, it replaces the default (except in the case of RedisTemplate, when the exclusion is based on the bean name, redisTemplate, not its type).

也就是说,通常情况下,如果针对自动配置类型添加自己的Bean,它将取代默认的,但是RedisTemplate恰好不在"通常情况"之列,因此扫描进入容器之后不能用@Aautowire类型匹配,而是bean的名字,因此用@Resource

@Resource//不能使用@Autowired,如果非要使用,不注明泛型类型即可
private RedisTemplate<String, Object> redisTemplate;

但是在注入成功之后,我再对计算结果序列化的时候报了标题所示的错误,之后实现了Serializable接口仍无济于事,最后发现我的包装类是以内部类的形式存在的,把要序列化的内部类独立出去,问题解决

/**
 * 饼图返回数据元的包装类型
 * 由于计算结果数据由本类对象包装,结果需要被Redis序列化保存
 * 因此这个包装类必须实现Serializable接口
 *
 */
public class DataPackage implements Serializable{
	private String name;
	private Integer value;
	public DataPackage(String name, Integer value) {
		super();
		this.name = name;
		this.value = value;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Integer getValue() {
		return value;
	}
	public void setValue(Integer value) {
		this.value = value;
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值