我正在我的应用程序中进行远程调用。我想处理不同的异常并在出现相应异常时执行不同的任务。
我正在调查 MalformedURLException
、 UnknownHostException
、ConnectionException
和 SocketTimeoutException
。
我知道,如果出现 MalformedURLException
,我想删除请求,而这个相当简单。
catch (MalformedURLException e) {
log.info("MalformedURLException while fetching log");
log.info("Content Url is Invalid and is being Dropped");
return keywords;
}
现在,如果互联网断开,我想在一小段时间后重试该请求。这里我应该处理哪个异常?
我对 ConnectException
和 UnknownHostException
感到困惑。
catch (UnknownHostException e) {
log.info("UnknownHostException while fetching log");
log.info("Internet disconnectivity Retrying Content Url");
keywords.add(value);
Thread.sleep(1000);
return keywords;
}
接下来,我在代码中使用 con.setConnectTimeout(20000);
和 con.setReadTimeout(30000);
。所以我猜测如果这个过期了我可以处理 SocketTimeoutException 吗?
catch (SocketTimeoutException e) {
log.info("SocketTimeoutException while fetching log:");
keywords = increaseRetryCount(keywords, result, retryCount, url);
return keywords;
}
我是否正确处理问题并使用正确的异常?如果我遗漏了什么,请告诉我。
最佳答案
当没有连接时,
ConnectException
和 UnknownHostException
都可能发生。当 DNS 缓存中没有条目时,会发生 UnknownHostException
;当 DNS 缓存中存在条目但无法访问主机时,会发生 ConnectException
。
简单地捕获IOException
并重试(但不是永远,而是增加暂停并在一段时间后放弃)。
唯一的特殊情况是无效的 URL 或来自服务器的永久错误(例如无效的身份验证,...)。
关于java - 在Java中进行远程调用时要处理哪些异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50811372/