Java代码函数中捕获异常时的Java最佳实践
我想知道处理这种情况的最佳方法或最佳实践是什么。猜一个简单的函数,如下所示:Java代码函数中捕获异常时的Java最佳实践,java,Java,我想知道处理这种情况的最佳方法或最佳实践是什么。猜一个简单的函数,如下所示: public Object f1() { Object result = null; try { String payload = methodThrowsAnException(); result = payload; } catch (IOException e) { throw new IllegalStateExcepti
public Object f1() {
Object result = null;
try {
String payload = methodThrowsAnException();
result = payload;
} catch (IOException e) {
throw new IllegalStateException(e); <<<<<<<<<<<<<<<
}
return result;
}
public对象f1(){
对象结果=空;
试一试{
字符串有效负载=methodThrowsAnException();
结果=有效载荷;
}捕获(IOE异常){
抛出新的IllegalStateException(e);重新抛出捕获的异常是个坏主意。通常,stacktrace会包含有关您的体系结构的或多或少的详细信息。这对攻击者很有用
我不会允许我的应用因为用户的行为而进入非法状态。在你的情况下,我会说:
try {
String payload = methodThrowsAnException();
result = payload;
} catch (IOException e) {
throw new IllegalArgumentException(<user's input which caused the exception>); <<<<<<<<<<<<<<<
}
试试看{
字符串有效负载=methodThrowsAnException();
结果=有效载荷;
}捕获(IOE异常){
抛出新的IllegalArgumentException(如果在某个特定场景中您预期会出现异常,那么从方法返回null没有什么错
或者,您可以允许异常冒泡,并由调用方处理
何时捕获并重新抛出异常?何时我可以通过抛出新异常来传达更好的含义
当我抛出一个新的异常时,我会包括原始异常吗?如果它是一个未知/意外的场景,需要进一步调试,我会这样做
让我举几个例子:
一些不可恢复的东西,如数据库连接中断。我会让异常冒泡出来。它应该在到达用户之前得到处理,并且可能会出现类似“服务不可用。请稍后重试”的一般错误消息
与应用程序相关的内容…例如找不到备份文件。在这种情况下,我将吞掉FileNotFoundException
,而是抛出一个特定于我的应用程序的backupfilemissingeexception
。这里我不需要包含FileNotFoundException
,因为这是一个预期的场景,并且没有进一步的调查
我调用了其他一些API,它们抛出了一个未记录的异常。在这种情况下,我将把它转换为我的应用程序异常,例如InterfaceApeException
,并包含原始异常,以便可以在REST/Action层记录它以及根本原因
如果要重新显示异常,首先不应捕获它,除非需要自定义代码。如果异常符合您的要求,则可以在出现异常时返回null