Spring 可缓存 - 使用 SpEL 过滤掉空集合
Posted
技术标签:
【中文标题】Spring 可缓存 - 使用 SpEL 过滤掉空集合【英文标题】:Spring cacheable - filter out empty collections using SpEL 【发布时间】:2014-11-16 15:12:09 【问题描述】:我想知道有没有办法使用 SpEL 来过滤掉空集合之类的值。
我的缓存当前过滤掉了空值:
@Cacheable(value = "groupIdToGroupNames",unless = "#result == null")
public Map<Long, Collection<String>> findAllBySearchCustomerKey(final long groupId)
return idToNameClient.findAllGroupMembersById(groupId);
我正在尝试找到一种方法来过滤掉大小为 0 但不为空的组。 有没有办法通过使用@Cacheable 的参数来做到这一点?
任何帮助将不胜感激。
【问题讨论】:
【参考方案1】:这对我有用
@Cacheable(cacheNames = "recordCache", key = "#list", unless="#result == null or #result.size() == 0")
【讨论】:
【参考方案2】:unless = "#result==null or #result.isEmpty()"
为我工作。
【讨论】:
这似乎并没有比接受的 5 岁答案添加任何新内容。它可能会被审稿人删除。如果您认为您的答案会产生重大影响,您可能需要添加说明,说明这比现有答案更好。 可能这对我来说更具可读性,而不是#result.size()==0。也同意@nvoigt,我们应该在任何答案上添加解释。 增加了很多!方法isEmpty
可能最终会做的不仅仅是简单的检查,而且对于可读性也是值得的【参考方案3】:
类似的东西
unless = "#result==null or #result.size()==0"
【讨论】:
我刚刚添加了它。 SpEL 新手:) 谢谢!【参考方案4】:仅举一个例子(Artem Bilan 的答案是有效的)。我的函数可以返回我的对象的 Optional.ofEmpty 或 Optional
@Cacheable(value = "myCache", unless = "#result == null", key = "@myDao.cacheKey(#id, #languageCode)")
public Optional<MyDTO> getMyStuff(int id, String languageCode)
...
【讨论】:
以上是关于Spring 可缓存 - 使用 SpEL 过滤掉空集合的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot Cache SpEL(#result)返回Null