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,可以进行各种操作‌
相关推荐
javachen__27 分钟前
SpringBoot整合P6Spy实现全链路SQL监控
spring boot·后端·sql
IT毕设实战小研7 小时前
基于Spring Boot 4s店车辆管理系统 租车管理系统 停车位管理系统 智慧车辆管理系统
java·开发语言·spring boot·后端·spring·毕业设计·课程设计
一只爱撸猫的程序猿8 小时前
使用Spring AI配合MCP(Model Context Protocol)构建一个"智能代码审查助手"
spring boot·aigc·ai编程
甄超锋8 小时前
Java ArrayList的介绍及用法
java·windows·spring boot·python·spring·spring cloud·tomcat
武昌库里写JAVA10 小时前
JAVA面试汇总(四)JVM(一)
java·vue.js·spring boot·sql·学习
Pitayafruit11 小时前
Spring AI 进阶之路03:集成RAG构建高效知识库
spring boot·后端·llm
zru_960212 小时前
Spring Boot 单元测试:@SpyBean 使用教程
spring boot·单元测试·log4j
甄超锋12 小时前
Java Maven更换国内源
java·开发语言·spring boot·spring·spring cloud·tomcat·maven
还是鼠鼠13 小时前
tlias智能学习辅助系统--Maven 高级-私服介绍与资源上传下载
java·spring boot·后端·spring·maven
2301_7930868714 小时前
Redis 04 Reactor
数据库·redis·缓存