多个Java根导致异常

Rya*_* R. 2 java exception-handling exception

我有一个有趣的场景,我在catch子句中设置HttpServletResponse错误."response.sendError(..)"也会抛出异常.在异常处理期间处理异常以保留原始异常详细信息的最佳方法是什么?

我有这样的事情:

try {
...
} catch(Exception e) {
  try {
      response.sendError(500);
    } catch(IOException e2) {
      //Can I do something like:
      //'throw new ServletException(e,e2)' here?
    }
}
Run Code Online (Sandbox Code Playgroud)

换句话说,将两个异常中的信息捆绑到下一个抛出的异常中的最佳方法是什么?在处理第二个异常时,我不想丢失第一个异常中的信息.

一般来说,多个try catch块看起来很可怕.理想情况下要避免那种混乱.总是可以在方法中捆绑嵌入式try/catch ...但仍然看起来很糟糕并且不能解决保留所有异常细节的问题.

ccl*_*eve 8

尝试:

try {
...
} catch(Exception e) {
  try {
      response.sendError(500);
    } catch(IOException e2) {
      e2.initCause(e);
      throw e2;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 如果'e2`上已经设置了原因,你如何处理?这有点棘手.在您的示例代码中,`e2.initCause(e);`如果已在`e2`上设置了cause,则会抛出异常. (3认同)
  • 我认为你可以创造更多的例外并将它们联系起来. (2认同)

Jus*_*KSU 6

initCause()如果异常已经有原因,则使用将不起作用。相反,您可以使用addSupressed()将异常包含在不同异常的堆栈跟踪中。

try {
...
} catch(Exception e) {
  try {
      response.sendError(500);
    } catch(IOException e2) {
      e.addSuppressed(e2);
      throw e;
    }
}
Run Code Online (Sandbox Code Playgroud)