私の Web サービスは次のヘッダーを送信します。
Cache-Control: public, max-age=60, max-stale=86400
今、私の最初の呼び出しで、これは応答です:
- コード = 200
- cacheResponse = null
- networkResponse = レスポンス{コード=200, ...}
- 本文 = 正しいデータ
1 分以内の 2 回目の呼び出しは次のとおりです。
- コード = 200
- cacheResponse = レスポンス{コード=200, ...}
- networkResponse = null
- 本文 = 正しいデータ
1 分後、Web サービスを削除し、別の呼び出しを行います。max-stale ヘッダーがあるため、cacheResponse を取得して古いデータを表示できると期待しています。応答は次のとおりです。
- コード = 404
- cacheResponse = レスポンス{コード=200, ...}
- networkResponse = レスポンス{コード=404, ...}
- 本文 = pagenotfounditem
現在、cacheResponse.body() は null を返すため、古いデータを使用できないため、 String cb = cacheBody.string();
. コード サンプルを以下に示します。
if(response.networkResponse() != null) {
System.out.println("There is no cache, or cache is invalidated.");
if(!response.isSuccessful()) {
System.out.println("Call is not successful");
if(response.cacheResponse() != null) {
System.out.println("There is a cache");
ResponseBody cacheBody = response.cacheResponse().body();
String cb = cacheBody.string();
System.out.println("cacheBody: " + cb);
return cb;
}
}
}
ResponseBody body = response.body();
if(body != null) {
String b = body.string();
System.out.println("body: " + b);
return b;
}
この動作は意図されたものですか? その場合、キャッシュされた応答データを取得するにはどうすればよいですか?