Grails缓存插件:仅使用三个参数中的两个可缓存键



使用restful api调用,例如

myserver/api/mydata?req?%7Bcode%3A%2244%22%2C%20name%3A%22sally%22%2C%20version%3A7%7D

,其中传入的参数是code=44, name=sally和version=7,并且我想只使用名称和版本作为键来缓存响应,而不使用代码。

我想做的是:

 @Cacheable(value="myCache", key="#name.concat(#version)")
 def mydata() {
 .....
 }

但是#name和#version都解析为null。显然,该格式只适用于方法参数,而不适用于params.name或params.version.

如果我将键保留为默认值,则缓存使用所有三个参数作为键(如果我更改一个,则不使用缓存)。这将是伟大的,除非我希望缓存被使用,不管'代码'和基于'名称'和'版本'作为键。

我的猜测是,我将需要覆盖默认的KeyGenerator,但我已经尝试和失败。有什么建议吗?

或者是否有一种方法可以使用@Cacheable注释访问params属性?

最简单的解决方案是将名称和版本定义为控制器动作的参数:

@Cacheable(value="myCache", key="#name.concat(#version)")
def mydata(String name, String version) {
}

如果不总是提供名称和版本参数,只需在方法签名中添加一个默认值:

@Cacheable(value="myCache", key="#name.concat(#version)")
def mydata(String name = null, String version = 0) {
}

相关内容

最新更新