Spring Cache + Spring Expression Language (SpEL) + Redis

org.springframework.expression.spel.SpelEvaluationException: EL1007E:(pos 0): поле или свойство 'orderId' не может быть найдено в null

orderId является одним из свойств в моем заказе Vo

Как использовать язык Spring Spring Expression Language (SpEL) в моем приложении Подпись метода @Cacheable(value = "customerId", key = "#orderVO.orderId" )

2 ответа

Само исключение объясняет, что объект параметра orderVO имеет значение null. И очевидно, что не будет никакого свойства нулевого объекта. Насколько я знаю, вы не можете обойти это.

Я хотел бы убедиться, что мой orderVO не является нулевым, прежде чем вызывать метод.

PS: эта ошибка не имеет ничего общего с конфигурациями Redis, SpEL или Spring.

РЕДАКТИРОВАТЬ: Чтобы кратко объяснить, что любой кэш может рассматриваться как HashMap, теперь представьте, что когда Spring попытается кешировать ваш объект, ему понадобится ключ, чтобы поместить возвращаемый объект против него. Но когда ваш orderVO имеет значение null, orderId не может быть получен, и, следовательно, ваш объект не может быть помещен в кеш (не может быть сгенерирован хеш-ключ и т. Д. И т. Д.).

Проблема в том, что когда вы используете SpEl с @Cacheable, он использует отдельный контекст, который не содержит вашего параметра, для доступа к данным того же класса вам нужно использовать #root.methodName

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

Другие вопросы по тегам