套接字异常的异常处理

时间:2019-02-25 06:30:31

标签: java exception exception-handling

我需要根据捕捉到的异常类型做不同的事情,以下是我学到的可以使用的两种方法:

方法1:

 try{
    ..
    ..
    }catch(SocketTimeoutExceptione){
     //do something
    }
    catch(RunTimeException e){
    //do something
    }

方法2:

try{
}
catch(RunTimeException e){
if (e instanceof SocketTimeoutException) {
                 LOGGER.error(e);   

            }else {
                LOGGER.error(e);
                //do something
            }
}

我得到以下异常,这是一个已知的连接问题:引发org.springframework.web.client.ResourceAccessException异常:POST请求“测试”时发生I / O错误:读取超时;嵌套异常是java.net.SocketTimeoutException:读取超时

方法1不可行,因为它仍将进入运行时异常块。 在方法2中,我无法检查它是否是运行时异常的实例,因为套接字例外不是它的一部分。 在这种情况下我该如何处理

1 个答案:

答案 0 :(得分:0)

java.lang.Object
  java.lang.Throwable
    java.lang.Exception
      java.lang.RuntimeException
        org.springframework.core.NestedRuntimeException
          org.springframework.web.client.RestClientException
            org.springframework.web.client.ResourceAccessException

这是异常类层次结构。我认为,如果您尝试抓住ResourceAccessException而不是SocketTimeoutException,那就可以了。但是,当catch找不到特定的异常时,如果它可以捕获其超级异常类,则它会捕获到RuntimeException

Ref:https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/client/ResourceAccessException.html