前几天加入缓存的时候 ,报了一个错
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.io .NotSerializableException:
这是报实体不能序列化的问题 但是我看了我的缓存的model是实现了Serializable了的
1 public class ListCacheModel implements Serializable { 2 3 /** 4 * 5 */ 6 private static final long serialVersionUID = -1664739780353060565L; 7 }
public class ObjActionDetailRes implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
private PositionRes position=new PositionRes();
private WorksObjActionRes works=new WorksObjActionRes();
private SerialContentActionRes serialContent=new SerialContentActionRes();
private SerialActionRes serial=new SerialActionRes();
private EventMainActionRes eventMain=new EventMainActionRes();
private EventActionRes event=new EventActionRes();
private CircleActionRes circle=new CircleActionRes();
private DouJinShiActionRes doujinshi=new DouJinShiActionRes();
}
这是我需要加入缓存的实体类。我一直以为是我的实体太复杂了。然后redis不能进行一个复杂的序列化。大神告诉我的 我的报错,如果不能进行自动序列化,就进行手动序列化。就是在每一个实体后面实现Serializable。后面我发现我不能序列化的原因,是因为ObjActionDetailRes中里面的SerialActionRes,WorksObjActionRes这些我封装用来返回的Res类并没有进行序列化。才导致的。当我实现了Serializable的时候 我们的eclipes是会报Warning的。因为我们没有自定义的SerialVersionUID.我一直都不明白这个常量是什么意思
private static final long serialVersionUID = 1L;
我发现这个东西就是用来标明当前Class的版本号。
详细的一些东西 可以查看http://www.cnblogs.com/haimishasha/p/5058085.html
http://www.cnblogs.com/haimishasha/p/5058091.html
http://www.cnblogs.com/haimishasha/p/5058089.html
浙公网安备 33010602011771号