当前位置: 代码迷 >> java >> 套接字异常的异常处理
  详细解决方案

套接字异常的异常处理

热度:112   发布时间:2023-07-18 09:04:27.0

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

方法一:

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

方法二:

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

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

我收到以下异常,这是一个已知的连接问题: 异常抛出 org.springframework.web.client.ResourceAccessException: I/O error on POST request for "test": Read timed out; 嵌套异常是 java.net.SocketTimeoutException: Read timed out

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

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

参考: :

  相关解决方案