首页 > 解决方案 > Java 尝试捕获异常

问题描述

我当前的代码块返回如下异常:

Exception occurred in API invocation A1-123 Fatal error
Caused by: A9-001 ColName is not found in TableName

但我想...

  1. 摆脱A1 Exception
  2. A9 Exception直接显示
  3. 不显示A9 ExceptionCaused by

如何使异常看起来像这样?

Exception occurred in API invocation A9-001 ColName is not found in TableName
<no Caused by clause>

这是我的示例代码:

public Sample Method (Input input) throws AException
{
   con = getSQLConnection();

   try{
      //do something
      if(x==null){
         throw new AException(A9ErrorMessages.A9_ERROR_FROM_TABLE, new String [] { "ColName", "TableName"});
      }
   }
   catch (Exception e){
      logger().error(e);
      throw new AException(e);
   }
   finally{
      if(con!=null){
         try{
            con.close();
         }
         catch(Exception e){
            logger().error(e);
            throw new AException(e);  
         }
      }
   }
}

如果它是这样的,它会起作用吗:

   try{
      //do something
   }
   catch (Exception e){
      logger().error(e);
      throw new AException(A9ErrorMessages.A9_ERROR_FROM_TABLE, new String [] { "ColName", "TableName"});
   }
   catch (Exception e){
      logger().error(e);
      throw new AException(e);
   }

标签: javaapiexceptionerror-handlingtry-catch

解决方案


我假设您想要捕获并传递的错误是AException- 否则您所要求的将违反该方法的合同。catch你可以通过这样的额外子句来实现你想要的。

try {
    // whatever
}
catch (AException ae) {
    throw ae;
}
catch (Exception e){
  logger().error(e);
  throw new AException(e);
}
finally {
     // whatever
}

这样,只有尚未属于类型的异常AException才会被包装在新AException对象中。


推荐阅读