コントローラーで呼び出す関数のパラメーターを認識させることで、@Cached アノテーションを少し改善しようとしています。
だから私はこのアクションを持っています:
public class ContextualCachedAction extends Action<ContextualCached> {
@Override
public Result call(Context ctx) throws Throwable {
try {
String key = makeKey(ctx);
Integer duration = configuration.duration();
Result result = (Result) Cache.get(key);
if (result == null) {
result = delegate.call(ctx);
//TODO find a way to cache only successful calls
Cache.set(key, result, duration);
}
return result;
} catch (RuntimeException e) {
throw e;
} catch (Throwable t) {
throw new RuntimeException(t);
}
}
private String makeKey(Context ctx) {
//makes the key from some parameters in the ctx.request()
}
}
私の質問は次のとおりです。OK() の場合にのみ、delegate.call() の結果をキャッシュしたいと思います。どうすればそれを確認できますか?物件はありますか?ユーティリティ?または Ok().getClass().isInstance(result) する必要がありますか?
答えとヒントをありがとう。
PS : なぜそれをしたいのですか? 数種類の異なる結果を生成する呼び出しがいくつかあるためです。私はしたくないので、それらをキャッシュすることがオプションになる可能性がある十分な結果はほとんどありません