3

次のような安らかな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 ではなく、メソッド パラメーターに対してのみ機能します。

キーをデフォルトのままにすると、キャッシュは 3 つのパラメーターすべてをキーとして使用します (1 つを変更すると、キャッシュは使用されません)。「コード」に関係なく、キーとして「名前」と「バージョン」に基づいてキャッシュを使用することを除いて、それは素晴らしいことです。

デフォルトの KeyGenerator をオーバーライドする必要があると思いますが、試してみましたが失敗しました。これを行う方法に関するアドバイスはありますか?

または、 @Cacheable アノテーションを使用して params プロパティにアクセスする方法はありますか?

4

1 に答える 1

2

フィル、最も簡単な解決策は、名前とバージョンをコントローラー アクションのパラメーターとして定義することです。

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

name および version パラメーターが常に提供されるとは限らない場合は、メソッド シグネチャにデフォルト値を追加するだけです。

@Cacheable(value="myCache", key="#name.concat(#version)")
def mydata(String name = null, String version = 0) {
}
于 2013-04-23T06:05:20.053 に答える