SpringBoot中缓存@Cacheable出错

SpringBoot中使用@Cacheable:

错误代码:

java 复制代码
@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.getPic(), advertise.getUrl()))
            .toList();   // ----------- ①
}

运行程序,出错:

java 复制代码
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 (`StreamReadFeature.INCLUDE_SOURCE_IN_LOCATION` disabled); line: 1, column: 2] 

解决方案

只需要将编号①处的代码修改为:

java 复制代码
.collect(Collectors.toList());

原理

  • collect(Collectors.toList())‌返回的数据:
  • ‌toList()‌返回的数据:

collect(Collectors.toList()) 和 toList() 的主要区别在于返回的列表类型和可变性:

  • collect(Collectors.toList())‌:返回的是一个普通的 ArrayList ,因此可以进行添加、删除和修改操作‌
  • ‌toList()‌:返回的是通过对原始数组创建一个不可修改的列表。一旦创建,就不能对其进行添加、删除或修改操作‌

‌使用场景‌:

  • ‌toList()‌:适用于不需要对列表进行修改的场景,如从数据库查询数据等,因为它返回的是不可变列表,可以防止数据被意外修改‌
  • ‌collect(Collectors.toList())‌:适用于需要对列表进行修改的场景,因为它返回的是普通的ArrayList,可以进行各种操作‌
相关推荐
zrc0070075 分钟前
steam无法登录 steam错误 登录时出现错误。请稍后再试。解决办法 steam无法登录解决办法 湖南地区steam DNS问题解决办法
windows·经验分享·游戏·缓存·游戏程序·创业创新·玩游戏
Small-Young21 分钟前
数据库乐观锁深度解析:MySQL、PostgreSQL 实战 + Spring Boot 集成指南
数据库·spring boot·mysql·postgresql·乐观锁·并发控制
CCblandy23 分钟前
缓存淘汰实测:一次全表扫描把 LRU 命中率从 46% 打到 38%,W-TinyLFU 守住 50% 却贵 11 倍
后端·python·缓存·性能优化·架构
Wang's Blog26 分钟前
Java 项目实战: 交友项目 - 小视频模块实战:访客记录、FastDFS 存储与 SpringCache 缓存
java·缓存·交友
她的男孩1 小时前
租户 A 的验证码,却用了租户 B 的 AccessKey:Forge Admin 修跨租户短信串发
java·spring boot·saas
麻瓜code2 小时前
双写一致性:为什么是“删缓存“,而不是“改缓存“
java·缓存·mybatis
小蒜学长2 小时前
基于SpringBoot+Vue的云南地区扶贫助农系统的设计与实现(代码+数据库+LW)
java·vue.js·spring boot·后端·乡村振兴
RuoyiOffice2 小时前
Hyper-V+Kubernetes 搭建实战:保留 Windows,构建三节点 Linux 容器集群
linux·spring boot·kubernetes·containerd·hyper-v·微服务部署·ruoyi office
骑着蜗牛撵大象3272 小时前
Spring Boot 4.1 + Spring AI 2.0:RAG 供文、图谱供关系、MCP 供工具的 Java Agent 平台
java·spring boot·spring·微服务·知识图谱·rag·mcp
java_nnnn2 小时前
Spring Boot 配置文件详解:从基础语法到 YAML 配置
spring boot·后端·github