我有一个要处理项目列表的用例。该处理不是原子的,它对于列表中的某些项目可能成功,而对于其他某些项目则可能失败。我想向API用户传达,对于列表中的某些项目,处理失败。我有3种选择:
返回包含成功项目的列表
返回包含失败项目的列表
引发异常,指出某些项目失败
如果我采用第三种方法,但仍想让客户端知道处理失败的项目,是否可以向异常类添加列表,并让客户端在获得异常时读取此列表?这是明智的吗?还有什么可以做的吗?
异常类如下所示:
@Getter @Setter
public class SomeProcessingException extends Exception {
private static final long serialVersionUID = 1L;
private List<SomeItem> failedItems;
public SomeProcessingException(String message) {
super(message);
}
}
答案 0 :(得分:1)
是的,您可以像以前一样扩展Exception
并添加List
失败的项目。
对于该部分:
仍然希望让客户知道处理失败的项目
什么是您的客户?最终用户?还是使用您的库的程序员?管理员?
如果是程序员,他可以抓住您的SomeProcessingException
并从中获取失败项目的列表。
如果最终用户正在查看日志(例如管理员),则必须重写toString
的{{1}}方法。
如果它是使用客户端(浏览器,Android手机,桌面应用程序...)的最终用户,则您必须拦截SomeProcessingException
并显示弹出窗口或类似的从中提取失败项的信息。
许多标准异常提供了对其使用类可以使用的内部属性的访问,例如URISyntaxException
具有方法getIndex()
可以:
将索引返回到发生解析错误的位置的输入字符串中;如果该位置未知,则返回-1。
类似地,SQLException
具有方法getErrorCode
用于:
检索此SQLException对象的供应商特定的异常代码。