拥有多个异常类不像冗余,尤其是当我们使用错误代码时?



我在我们的应用程序中使用Spring Boot和Spring Rest。

我的查询是:在我们的应用程序中,我们使用错误代码,同时创建多个异常类。那么,当我们已经使用自定义错误代码时,再次创建多个异常类有什么意义呢?我想为整个应用程序只创建一个自定义异常类(比如AppException(,应该足以使用错误代码显示各种错误场景的错误响应。

好吧,即使对于日志,我们也可以显示相同的异常(即AppException(,并在日志中显示错误代码。因此,当任何RunTimeException发生时,通过查看日志中的错误代码和相应的错误消息,我们将了解实际原因,对吧?

所以,拥有多个异常类并不像冗余,尤其是当我们使用错误代码时

如果我错了,请你想想

编辑:仅供参考,下面是我的CustomException,它将错误代码作为参数

import java.util.Arrays;
public class MyAppException extends RuntimeException {
private final MyAppErrorCodes errorCode;
private final Object[] errorCodeArgs;
public MyAppException(final MyAppErrorCodes errorCode, final Throwable cause, final Object... args) {
super(cause);
this.errorCode = errorCode;
this.errorCodeArgs = Arrays.copyOf(args, args.length);
}
public MyAppErrorCodes getErrorCode() {
return errorCode;
}
public Object[] getErrorCodeArgs() {
return errorCodeArgs.clone();
}
}

如果您有一个通用应用程序异常,例如

class ApplicationException extends Exception {
...
private int errorCode; // with getter and setter
}

异常情况的真正含义编码在ApplicationException.errorCode中,例如4839238756

我认为这对开发人员来说意义重大,可能与一个非常特定的错误条件有关,比如cannot create new resource

您可以将含义提取到更高的级别,并使用多个异常类,例如

class ResourceException extends ApplicationException {
...
}
class NetworkException extends ApplicationException {
...
}

然后,问题被分类到应用程序中的离散功能区域,并且可以被记录到不同的问题日志文件中。具体原因仍然可以在errorCode中进行编码。

这取决于您是否希望进一步处理链上的异常,例如,为不同类型的异常(如数据库错误、网络错误等(创建单独的日志文件,而不是从其errorCode中确定它是什么类型的异常。

需要修复网络异常的开发人员可以专注于这些异常,因为例如,只有那些记录到issues.network.log的异常,并且每个errorCode都会在该异常类型的上下文中进一步缩小其范围。

如果您正在登录到数据库,则可以查询所有NetworkException,而不是一系列errorCode,例如,如果您将errorCode划分为多个功能区域,则查询234342898987之间的所有errorCode

由于某种原因,同时使用两者是可以接受的。

大多数情况下,使用多个异常对系统的错误处理更好,因为java可以处理它(try-catch(。

现在,使用错误代码对调用方来说可能很有趣。。想象一下,您希望对错误的原因进行细粒度分析。对于所有非法输入,您将返回一个400错误的请求。。但是,您可以使用业务错误代码来丰富您的响应。

示例:

  • Http 400,错误代码001(需要姓氏(
  • Http 400,错误代码002(姓氏太长(

对于呼叫方,解释错误代码而不是错误消息将很简单

实际上,这就是我们使用SOAP推送错误详细信息的方式。

错误代码对于丰富日志消息以供进一步调试也很有意思。

关于你的问题:

所以,拥有多个异常类不像冗余,尤其是当我们使用错误代码时?

否。两者都使用是完全合理的。

相关内容

最新更新