今天早上干活的时候发现,项目中有一个请求超时的接口,一看是一个返回数据量很大的接口,但是已经添加到redis而且每天也有定时任务,不可能早上这个点请求还这么慢啊?
看了一眼控制台,果然有问题:
java.io.NotSerializableException: java.util.ArrayList$SubList
原来是这玩意死活添加不进redis,
是因为SubList类未实现序列化接口Serializable,
于是看了一下这个接口具体的代码。
原来是其中有一个list是使用了 ArrayList的subList api
return testList.subList(fromIndex, endIndex);
原因: subList 只是list的视图 而并非实体对象,它不存储元素只是可以操作原数据。
那么解决办法很简单,那就是给subList之后的list去new一个List去接收即可
List tempList = new ArrayList<>(testList.subList(fromIndex, endIndex));