【问题标题】:What is the most accurate approach to implement a custom Exception tree?实现自定义异常树的最准确方法是什么?
【发布时间】:2014-07-08 05:28:43
【问题描述】:

我正在开发一个为客户端提供方法的 RPC Web 服务,我想使用异常来处理服务器应用程序中的错误,以便自动生成带有错误标头的响应,更重要的是,自定义错误代码(整数)。我创建了一个包含整数和消息的基本 CustomException 类。

我是否应该为每个方法的每个异常创建一个新类,并将其自定义错误代码硬编码在该类上?还是有其他方法可以解决这个问题?

例如假设我有一个 Login 方法,它可以有两个异常,“UnknownUsername”和“InvalidPassword”(仅作为示例;正如 Tieston T. 评论的那样,返回身份验证信息不是一个好习惯)。到目前为止我能想到的方法是:

  • 使用LoginException 类并在内部方法上设置错误代码
  • 创建一个UnknownUsernameException 和一个InvalidPasswordException 类,继承LoginException,并在每个类上硬编码错误代码

【问题讨论】:

  • 值得注意的是,标准安全协议规定,在身份验证尝试期间,您不会告诉调用应用程序什么是无效的。
  • 我只是写下了我想到的第一个例子;我实际上并没有在我的服务上使用身份验证,但无论如何这是一个非常有用的旁注。
  • 恕我直言LoginException 也不例外。预计登录可能会失败。
  • 最简单的实现可能是@Harik 的第二个建议;有一个自定义错误类型,至少有一个错误代码,带有可选消息。您可以为您的 API 用户提供某种指南,解释各种错误代码的含义。

标签: c# java exception-handling error-code


【解决方案1】:

您可以根据需要创建单独的异常类。

或者您可以创建一个单独的自定义异常类,其中将包含一个 ENUM,其中包含错误代码和可能发生的各种异常类型的消息。

您的自定义异常类将具有接受 ENUM 和消息的构造函数。

每当代码抛出自定义异常时,它都会通过构造函数填充枚举。您可以从中查找错误代码和错误消息并将其传递给客户端。

这将帮助您记录异常(供内部使用)并通过一个类响应客户端。

【讨论】:

  • 我在看this question,但后来意识到用户alexn不赞成它的唯一原因是因为捕获和流量控制;就我而言,它并不是真正需要的。所以我认为这可能是这个问题的最佳答案。
【解决方案2】:

我认为您应该首先搜索标准 java 异常,看看 Java Exceptions 是否已经有一个满足您的需要,如果没有,您可以找到最近的一个并覆盖它以满足您的需要。

对我来说,我更喜欢将以下异常与一个异常 UnknownUsernameInvalidPassword 异常结合起来,请不要告诉任何人关于用户名或密码的异常也是你。所以不要继承LoginException

【讨论】:

    【解决方案3】:

    通常最好使用标准的异常类。 This 是我认为有用的异常处理最佳实践的一个很好的来源。

    我认为应该根据应用程序如何处理它们来创建自定义异常类。例如,如果您要捕获与登录相关的异常并向用户显示“登录失败”消息,您可能应该创建一个类。对于内部使用和日志记录,您可以向对象添加更多详细信息。

    此外,出于维护目的,最好不要定义硬编码错误代码,以防以后添加一些新的错误代码。

    【讨论】:

    • 非常有用的链接!我没有找到任何与实际问题相关的标准异常(应该返回给客户端的服务异常),所以 Hirak 的回答是有道理的(创建自定义异常类)。
    猜你喜欢
    • 2011-06-15
    • 2018-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 2010-09-10
    相关资源
    最近更新 更多