手动缓存 Rest 而不检查 headers 的 ETag 和 Last-Modified

Manually caching Rest without checking headers for ETag and Last-Modified

我正在使用 Rest 调用我无权访问的远程服务器。我想永久缓存接收到的数据以供离线使用,而不检查 headers.[=20 中的 Last-ModifiedETag =]

我希望CachingMode.MANUAL机制检查是否有离线内容,如果有none,然后上网获取内容,但没有。

为了避免这种情况,我必须先使用 RestCachingMode.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();
}

这是有道理的。在此提交中添加了对此的支持:https://github.com/codenameone/CodenameOne/commit/fd81d979507fb08ee1d595b94df5973b322766a3