簡體   English   中英

Spring 緩存 + Spring 表達式語言 (SpEL) + Redis

[英]Spring Cache + Spring Expression Language (SpEL) + Redis

org.springframework.expression.spel.SpelEvaluationException: EL1007E:(pos 0): 在 null 上找不到字段或屬性“orderId”

orderId是我訂單的 Vo 中的屬性之一

如何在我的應用程序中使用 Spring Spring 表達式語言 (SpEL) 方法簽名@Cacheable(value = "customerId", key = "#orderVO.orderId" )

異常本身說明參數對象orderVO為空。 很明顯,將沒有null對象的屬性。 據我所知,您無法解決這個問題。

在調用該方法之前,請確保我的orderVO不為null。

PS:此錯誤與Redis,SpEL或Spring配置無關。

編輯:要非常簡單地解釋任何緩存都可以視為HashMap,現在想象一下當spring將嘗試緩存您的對象時,它將需要一個密鑰來將返回的對象放在該對象上。 但是,當您的orderVO為null時,將無法獲得orderId,因此無法將您的對象放入緩存(無法生成哈希鍵,等等)。

問題是,當您將 SpEl 與 @Cacheable 一起使用時,它使用不包含您的參數的單獨上下文,以訪問相同的 class 的數據,您需要使用#root.methodName

https://docs.spring.io/spring-framework/docs/3.2.x/spring-framework-reference/html/cache.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM