我正在申请中拨打远程电话。我想处理不同的异常,并在各自的例外情况下执行不同的任务。
我正在调查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;
}
我是否正确处理问题并使用正确的例外情况?请告诉我,如果我遗失了什么。
答案 0 :(得分:1)
ConnectException
和UnknownHostException
都会发生。如果DNS缓存中没有条目,则会发生UnknownHostException
;当DNS缓存中有条目但主机无法访问时,会发生ConnectException
。
只需抓住IOException
并重试(但不是永远,而是在一段时间后增加暂停并放弃)。
唯一的特殊情况是来自服务器的无效URL或永久性错误(如无效身份验证,......)。