如何在CodenameOne中使用Terse REST API捕获HTTP 404错误
在Codename One中用Terse REST API自定义处理HTTP 404错误
你现在遇到的问题是Terse REST默认会接管4xx/5xx这类错误的处理,直接弹出标准错误提示,而你想要自定义404的提示信息对吧?别担心,有两种简单的方法可以实现这个需求:
方法一:使用onError回调拦截错误
你可以在请求链中加入onError方法,专门捕获错误响应,判断状态码后自定义处理,代码示例如下:
Response<Map> jsonData = Rest.get(URL + "lookup") .jsonContent() .queryParam("account", accountNo) .onError(response -> { if (response.getResponseCode() == 404) { // 显示你自定义的提示框 Dialog.show("提示", "该账户不存在,请检查账号后重试", "确定", null); return true; // 返回true告诉框架:这个错误我们已经处理了,不用再走默认流程 } return false; // 其他错误交给默认处理器处理 }) .getAsJsonMap();
这个方法的好处是直接嵌入到请求流程里,代码紧凑。需要注意的是,onError的回调默认是在EDT(事件调度线程)执行的,所以直接调用UI组件没问题;如果遇到特殊情况,也可以用Display.getInstance().callSerially()把UI操作包裹起来,确保线程安全。
方法二:先获取完整响应再判断状态码
如果你需要对不同状态码做更细致的处理,可以先调用getResponse()拿到完整的响应对象,再根据状态码分支处理:
Response<Map> response = Rest.get(URL + "lookup") .jsonContent() .queryParam("account", accountNo) .getResponse(); if (response.getResponseCode() == 200) { // 状态正常,解析返回的JSON数据 Map jsonData = response.getResponseData(); // 这里写你的业务逻辑... } else if (response.getResponseCode() == 404) { // 处理404错误,显示自定义提示 Dialog.show("提示", "该账户不存在,请检查账号后重试", "确定", null); } else { // 其他错误可以交给默认处理器处理 response.handleError(); }
这种方法更灵活,你可以针对不同的错误码(比如401、500等)分别设置处理逻辑,适合复杂的错误场景。
两种方法都能解决你的问题,根据自己的需求选就行啦~
内容的提问来源于stack exchange,提问作者NvServices
相关产品推荐
相关产品推荐

