我在我们的应用程序中使用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
划分为多个功能区域,则查询234342
和898987
之间的所有errorCode
。
由于某种原因,同时使用两者是可以接受的。
大多数情况下,使用多个异常对系统的错误处理更好,因为java可以处理它(try-catch(。
现在,使用错误代码对调用方来说可能很有趣。。想象一下,您希望对错误的原因进行细粒度分析。对于所有非法输入,您将返回一个400错误的请求。。但是,您可以使用业务错误代码来丰富您的响应。
示例:
- Http 400,错误代码001(需要姓氏(
- Http 400,错误代码002(姓氏太长(
对于呼叫方,解释错误代码而不是错误消息将很简单
实际上,这就是我们使用SOAP推送错误详细信息的方式。
错误代码对于丰富日志消息以供进一步调试也很有意思。
关于你的问题:
所以,拥有多个异常类不像冗余,尤其是当我们使用错误代码时?
否。两者都使用是完全合理的。