spring-boot - 拥有多个异常类不像冗余,尤其是当我们使用错误代码时?
问题描述
我在我们的应用程序中使用 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
s 而不是一个范围errorCode
,例如,如果您要划分为功能区域,则都errorCode
在234342
and之间。898987
errorCode
推荐阅读
- c++ - 为什么成员类型需要前向声明而成员函数不需要?
- c# - 从 LINQ 加载 DataGridView
- python-3.x - 如何通过浏览器循环更改列表中的地址?(Python 3/硒)
- javascript - 如何在将电子邮件设为主要电子邮件之前对其进行验证(Firebase 身份验证)
- numpy - 对 numpy.einsum 进行延迟评估,以避免将中间大维数组存储在内存中
- asp.net-mvc - 将模型数据传递给 Url.Action 方法
- php - PHP 和 Pods:仅将数组值组合到新数组中
- java - 有没有一种简单的方法可以在 Android 上展平 json:api 响应?
- bash - sed/awk 命令在保留空格的同时替换模式
- amazon-web-services - 如何使用 Javascript SDK 在 AWS SNS 订阅上设置消息过滤