Spring Boot Cache SpEL (#result) возвращает значение NULL - PullRequest
0 голосов
/ 04 марта 2019

У меня есть Spring Boot RESTful API для получения и отправки SMS-сообщений клиентам.Мое приложение подключается к нашему локальному SMS-серверу, получает и отправляет SMS-сообщения клиентам через операторов мобильной связи.Мое приложение работает хорошо.Но я хотел оптимизировать свое приложение, внедрив кеш.Я использую простой кеш Spring Boot.Я сталкиваюсь с некоторыми трудностями при создании новых SMS.

Все отправленные / полученные SMS-сообщения имеют форму разговоров (за тикет) и к ним прикреплены клиенты.Поэтому я столкнулся с трудностью сохранения клиента в кеше.Ниже приведен фрагмент createClient ():

@Transactional
@Caching(evict = {
        @CacheEvict("allClientsPage"),
        @CacheEvict("countClients")
}, put = {
        @CachePut(value = "clients", key = "#result.id", unless="#result != null"),
        @CachePut(value = "clientsByPhone", key = "#result.phoneNumber", unless="#result != null")
})
public Client create(Client client) {
    Client c = new Client();
    if (client.getName() != null) c.setName(client.getName().trim());
    c.setPhoneNumber(client.getPhoneNumber().trim());

    /**---***/

    c.setCreatedAt(new Date());
    return clientRepository.save(c);
}

Когда я пытался создать новый клиент, выдается

org.springframework.expression.spel.SpelEvaluationException: EL1007E: Property or field 'id' cannot be found on null

.

enter image description here

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 12 апреля 2019

вместо использования unless="# result! = null" используйте condition="#result != null"

...