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.getPic(), advertise.getUrl()))
.toList(); // ----------- ①
}
運行程序,出錯:
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]
解決方案
只需要將編號①處的代碼修改為:
.collect(Collectors.toList());
原理
collect(Collectors.toList())返回的數(shù)據(jù):

toList()返回的數(shù)據(jù):

collect(Collectors.toList()) 和 toList() 的主要區(qū)別在于返回的列表類型和可變性:
- collect(Collectors.toList()):返回的是一個普通的 ArrayList ,因此可以進行添加、刪除和修改操作
- toList():返回的是通過對原始數(shù)組創(chuàng)建一個不可修改的列表。一旦創(chuàng)建,就不能對其進行添加、刪除或修改操作
使用場景:
- toList():適用于不需要對列表進行修改的場景,如從數(shù)據(jù)庫查詢數(shù)據(jù)等,因為它返回的是不可變列表,可以防止數(shù)據(jù)被意外修改
- collect(Collectors.toList()):適用于需要對列表進行修改的場景,因為它返回的是普通的ArrayList,可以進行各種操作
到此這篇關(guān)于SpringBoot中緩存@Cacheable出錯的問題解決的文章就介紹到這了,更多相關(guān)SpringBoot緩存@Cacheable出錯內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
一個MIDP俄羅斯方塊游戲的設(shè)計和實現(xiàn)
一個MIDP俄羅斯方塊游戲的設(shè)計和實現(xiàn)...2006-12-12
Spring?Boot攔截器和監(jiān)聽器實現(xiàn)對請求和響應(yīng)處理實戰(zhàn)
這篇文章主要介紹了Spring?Boot攔截器和監(jiān)聽器實現(xiàn)對請求和響應(yīng)處理實戰(zhàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-06-06
SpringSecurity根據(jù)自定義異常返回登錄錯誤提示信息(賬戶鎖定)
本文介紹了在SpringSecurity中根據(jù)自定義異常返回登錄錯誤提示信息的方法,特別是在賬戶鎖定時,通過記錄輸錯次數(shù)、重寫校驗方法并拋出自定義異常,感興趣的可以了解一下2025-01-01
java格式化數(shù)字操作 NumberFormat及DecimalFormat
這篇文章主要介紹了java格式化數(shù)字操作 NumberFormat及DecimalFormat,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10
Java中使用OKHTTP3的詳細教程與實戰(zhàn)應(yīng)用案例
okhttp是當下主流的網(wǎng)絡(luò)請求的開源框架,效率很高,使用起來也非常方便,這篇文章主要介紹了Java中使用OKHTTP3的詳細教程與實戰(zhàn)應(yīng)用案例的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2026-01-01
mybatis攔截器實現(xiàn)數(shù)據(jù)庫數(shù)據(jù)權(quán)限隔離方式
通過Mybatis攔截器,在執(zhí)行SQL前添加條件實現(xiàn)數(shù)據(jù)權(quán)限隔離,特別是對于存在用戶ID區(qū)分的表,攔截器會自動添加如user_id=#{userId}的條件,確保SQL在執(zhí)行時只能操作指定用戶的數(shù)據(jù),此方法主要應(yīng)用于Mybatis的四個階段2024-11-11
Springboot jpa @Column命名大小寫問題及解決
這篇文章主要介紹了Springboot jpa @Column命名大小寫問題及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10

