首页 > 解决方案 > 拥有多个异常类不像冗余,尤其是当我们使用错误代码时?

问题描述

我在我们的应用程序中使用 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();
    }
}

标签: spring-bootrestspring-mvcexception

解决方案


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

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人都会进一步缩小范围,但在该异常类型的上下文中。

如果您要登录到数据库,您可以查询所有NetworkExceptions 而不是一个范围errorCode,例如,如果您要划分为功能区域,则都errorCode234342and之间。898987errorCode


推荐阅读