【问题标题】:Spring cacheable - filter out empty collections using SpELSpring 可缓存 - 使用 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 的参数来做到这一点?

任何帮助将不胜感激。

【问题讨论】:

    标签: java spring spring-integration spring-el


    【解决方案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) {
      ... }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-09-07
        • 2011-09-29
        • 1970-01-01
        • 2015-05-02
        • 2012-04-27
        • 2012-05-27
        • 1970-01-01
        相关资源
        最近更新 更多