Tôi đang cố gắng tạo chú thích @Cached tốt hơn một chút bằng cách làm cho nó nhận biết các tham số của hàm tôi gọi trong bộ điều khiển của mình.kiểm tra kết quả là một playframework ok
vì vậy tôi có hành động này:
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()
}
}
Câu hỏi của tôi là thế này: Tôi muốn để cache kết quả của delegate.call() chỉ nếu nó là một Ok(). Tôi làm cách nào để kiểm tra điều đó? Có tài sản không? một tiện ích? hoặc tôi cần phải Ok(). GetClass(). IsInstance (kết quả)?
Cảm ơn mọi câu trả lời và gợi ý.
PS: Tại sao tôi muốn làm điều đó? Bởi vì tôi có một số cuộc gọi tạo ra vài loại kết quả khác nhau. Vài kết quả đủ để bộ nhớ đệm số họ có thể là một lựa chọn vì tôi không muốn
Điều đó làm việc ... cảm ơn –
Đây có phải là cách được khuyến nghị để thực hiện việc này không? Điều này có vẻ thực sự khó xử và phức tạp để đạt được điều gì đó đơn giản như kiểm tra mã trạng thái phản hồi – knittl
Điều gì xảy ra nếu nó không phải là một thể hiện của 'PlainResult'? – jlars62