如何创建 Spring 不允许缓存指定密钥的缓存 KeyGenerator

How to create Spring Cache KeyGenerator that allows no caching for specified key

我只想为管理员用户禁用缓存。因此,我编写了一种方法来为管理员生成如下 returns null 的密钥。但是我得到

java.lang.IllegalArgumentException: Null key returned for cache operation exeption.

有什么办法可以做到吗?

//a method that generates a menu for each user
@Cacheable(cacheNames = "topmenu", keyGenerator = "uiComponentKey")
@Override
public String renderResponse() {...}   


//method used by a key generator to generate cache keys.
@Override
public Object getCacheKey() {
    if (user.isAdmin()) {
        return null;
    }
    return user.getUser().getLogin() + "@" + "topmenu";
}

我想您可以使用 conditional caching feature 来实现。像这样:

@Cacheable(cacheNames = "topmenu", condition="#user.isAdmin()")
@Override
public String renderResponse(User user) {...}

请注意,在这种情况下,您必须将用户对象传递给此方法。