手动缓存 Rest 而不检查 headers 的 ETag 和 Last-Modified
Manually caching Rest without checking headers for ETag and Last-Modified
我正在使用 Rest
调用我无权访问的远程服务器。我想永久缓存接收到的数据以供离线使用,而不检查 headers.[=20 中的 Last-Modified 或 ETag =]
我希望CachingMode.MANUAL
机制检查是否有离线内容,如果有none,然后上网获取内容,但没有。
为了避免这种情况,我必须先使用 Rest
和 CachingMode.OFFLINE
,如果 returns 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();
}
我正在使用 Rest
调用我无权访问的远程服务器。我想永久缓存接收到的数据以供离线使用,而不检查 headers.[=20 中的 Last-Modified 或 ETag =]
我希望CachingMode.MANUAL
机制检查是否有离线内容,如果有none,然后上网获取内容,但没有。
为了避免这种情况,我必须先使用 Rest
和 CachingMode.OFFLINE
,如果 returns 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();
}