原代码:
if (null != dtoErrorDataSqlResult) { if (list.size() > 40) { dtoErrorDataSqlResult.setDatas(list.subList(20, 40)); } else { dtoErrorDataSqlResult.setDatas(list); } addValue("cacheDFS", cacheID, dtoErrorDataSqlResult);// 缓存查询结果 }
修改后的代码:
if (null != dtoErrorDataSqlResult) { if (list.size() > 40) { List<Map<String, String>> tmp = new ArrayList<>(list.subList(20, 40)); dtoErrorDataSqlResult.setDatas(tmp); } else { dtoErrorDataSqlResult.setDatas(list); } addValue("cacheDFS", cacheID, dtoErrorDataSqlResult);// 缓存查询结果 }
看源码注释得知错误原因是:List.subList方法返回的只是一个视图,而ehcache写入磁盘需要的是实体,所以出现此问题!