将数据添加到异常

时间:2019-01-22 16:45:56

标签: java exception exception-handling

我有一个要处理项目列表的用例。该处理不是原子的,它对于列表中的某些项目可能成功,而对于其他某些项目则可能失败。我想向API用户传达,对于列表中的某些项目,处理失败。我有3种选择:

  1. 返回包含成功项目的列表

  2. 返回包含失败项目的列表

  3. 引发异常,指出某些项目失败

如果我采用第三种方法,但仍想让客户端知道处理失败的项目,是否可以向异常类添加列表,并让客户端在获得异常时读取此列表?这是明智的吗?还有什么可以做的吗?

异常类如下所示:

@Getter @Setter
public class SomeProcessingException extends Exception {
  private static final long serialVersionUID = 1L;
  private List<SomeItem> failedItems;

  public SomeProcessingException(String message) {
    super(message);
  }
}

1 个答案:

答案 0 :(得分:1)

是的,您可以像以前一样扩展Exception并添加List失败的项目。

对于该部分:

  

仍然希望让客户知道处理失败的项目

什么是您的客户?最终用户?还是使用您的库的程序员?管理员?

如果是程序员,他可以抓住您的SomeProcessingException并从中获取失败项目的列表。

如果最终用户正在查看日志(例如管理员),则必须重写toString的{​​{1}}方法。

如果它是使用客户端(浏览器,Android手机,桌面应用程序...)的最终用户,则您必须拦截SomeProcessingException并显示弹出窗口或类似的从中提取失败项的信息。


许多标准异常提供了对其使用类可以使用的内部属性的访问,例如URISyntaxException具有方法getIndex()可以:

  

将索引返回到发生解析错误的位置的输入字符串中;如果该位置未知,则返回-1。

类似地,SQLException具有方法getErrorCode用于:

  

检索此SQLException对象的供应商特定的异常代码。