Java 手动缓存Rest,而不检查ETag和上次修改的头

Java 手动缓存Rest,而不检查ETag和上次修改的头,java,codenameone,Java,Codenameone,我正在使用Rest调用无法访问的远程服务器。我想永久缓存接收到的数据以供脱机使用,而无需检查标题中的Last Modified或ETag 我希望使用CachingMode.MANUAL机制来检查是否有脱机内容,如果没有,则联机获取内容,但实际上没有 为了避免这种情况,我必须首先将Rest与CachingMode.OFFLINE一起使用,如果返回404,则使用CachingMode.SMART再次调用 难道不应该有一个选项(比如说CachingMode.OFFLINE\u FIRST)首先检查脱机

我正在使用
Rest
调用无法访问的远程服务器。我想永久缓存接收到的数据以供脱机使用,而无需检查标题中的Last Modified或ETag

我希望使用
CachingMode.MANUAL
机制来检查是否有脱机内容,如果没有,则联机获取内容,但实际上没有

为了避免这种情况,我必须首先将
Rest
CachingMode.OFFLINE
一起使用,如果返回404,则使用
CachingMode.SMART
再次调用

难道不应该有一个选项(比如说
CachingMode.OFFLINE\u 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();
}
Response=Rest.get(url)
.cacheMode(CachingMode.OFFLINE)
.queryParam(“参数”,值)
.jsonContent().onErrorCodeJSON(e->{
抛出新的RuntimeException(createErrorMessage(e));
}).onError(e->{
如果(e.getResponseCode()==0 | | e.getConnectionRequest().getResponseCode()==404){
is404=真;
返回;
}
抛出新的RuntimeException(“网络错误。请检查您的连接并重试。”);
}).timeout(6000).getAsJsonMap();
如果(is404){
is404=假;
response=Rest.get(url)
.cacheMode(CachingMode.SMART)
.queryParam(“参数”,值)
.jsonContent().onErrorCodeJSON(e->{
抛出新的RuntimeException(createErrorMessage(e));
}).onError(e->{
抛出新的RuntimeException(“网络错误。请检查您的连接并重试。”);
}).timeout(6000).getAsJsonMap();
}

这是有道理的。在这个提交中增加了对此的支持:

我认为这个缓存模式还不可用。但是,您已经在社区中放置了一些非常有用的东西,甚至我也曾经通过代码实现过类似的用例。投票吧!您的断言:«我想永久缓存接收到的数据以供脱机使用»,这并不等同于将接收到的JSON下载到存储或文件系统存储中并使用下载的文件?@FrancescoGalgani部分正确,但我不想重写整个下载代码,检查是否存在,如果没有,则获取新内容,在需要的时候清洗。