我正在使用 Rest
调用一个无法访问的远程服务器。我想要永久缓存接收到的数据以供离线使用,而不需要检查头文件中的 Last-Modified 或 ETag。
我期望 CachingMode.MANUAL
机制会检查是否存在脱机内容,如果没有,则会在线获取内容,但它并没有这样做。
为了规避这个问题,我首先使用带有 CachingMode.OFFLINE
的 Rest
,如果返回404,则再使用带有 CachingMode.SMART
的另一个调用。
难道不应该有这样一种选项(比如说 CachingMode.OFFLINE_FIRST
),它首先检查离线内容,如果没有内容,则使用 (CachingMode.SMART
) 在线获取吗?
以下是我的当前方法:
Response<Map> response = Rest.get(url)
.cacheMode(CachingMode.OFFLINE)
.queryParam("param", value)
.jsonContent().onErrorCodeJSON(e -> {
throw new RuntimeException(createErrorMessage(e));
}).onError(e -> {
if (e.getResponseCode() == 0 || e.getConnectionRequest().getResponseCode() == 404) {
is404 = true;
return;
}
throw new RuntimeException("Network error. Please check your connection and try again.");
}).timeout(6000).getAsJsonMap();
if (is404) {
is404 = false;
response = Rest.get(url)
.cacheMode(CachingMode.SMART)
.queryParam("param", value)
.jsonContent().onErrorCodeJSON(e -> {
throw new RuntimeException(createErrorMessage(e));
}).onError(e -> {
throw new RuntimeException("Network error. Please check your connection and try again.");
}).timeout(6000).getAsJsonMap();
}