SpringBoot中缓存@Cacheable出错的问题解决
目录
- 错误代码:
- 解决方案
- 原理
错误代码:
@Cacheable(value = "FrontAdvertiseVOList", keyGenerator = "cacheKey") @Override public List<FrontAdvertiseVO> getFrontAdvertiseVOList(Integer count) { return this.list(Wrappers.<Advertise>lambdaQuery() .select(Advertise::getPic, Advertise::getUrl) .eq(Advertise::getState, 1) .orderByDesc(Advertise::getPriority) .last("limit " + count)) .stream() .map(advertise -> new FrontAdvertiseVO(advertise.ge编程tPic(), advertise.getUrl())) .toList(); // ----------- ① }
运行程序,www.devze.com出错:
org.springframework.data.Redis.serializer.SerializationException: Could not read jsON:Unexpected token (START_OBJECT), expected VALUE_STRING: need String, Number of Boolean value that contains type id (for subtype of Java.lang.Object) at [Source: REDACTED (`Streamhttp://www.devze.comReadFeature.INCLUDE_SOURCE_IN_LOCATION` disabled); line: 1, column: 2]
解决方案
只需要将编号①处的代码修改为:
.collect(Collectors.toList()); http://www.devze.com
原理
collect(Collectors.toList())返回的数据:
toList()返回的数据:
collect(Collectors.toList()) 和 toList() 的主要区别在于返回的列表类型和可变性:
- collect(Collectors.toList()):返回的是一个普通的 ArrayList ,因此可以进行添加、删除和修改操作
- toList():返回的是通过对原始数组创建一个不可修改的列表。一旦创建,就不能对其进行添加、删除或修改操作
使用场景:
- toList():适用于不需要对列表进行修改的场景,如从数据库查询数据等,因为它返回的是不可变列表,可以防止数据被意外修改
- collect(Collectors.toList(编程客栈)):适用于需要对列表进行修改的场景,因为它返回的是普通的ArrayList,可以进行各种操作
到此这篇关于SpringBoot中缓存@Cacheable出错的问题解决的文章就介绍到这了,更多相关SpringBoot缓存@Cacheable出错内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!
精彩评论