【发布时间】:2015-02-21 23:11:18
【问题描述】:
在阅读了很多关于 Java 中滥用异常以及如何让异常在应用程序的不同层中冒泡之后,我已经到了一个我不知道我应该做什么的地步处理我的应用程序可能存在的潜在错误。
基本上,我有一个 Web 服务,它使用 DAO 模式来访问我的数据库中的数据。所有数据库操作都可以抛出SQLException。
到今天为止,我正在使用 try catch 来捕获 SQLException,然后抛出一个名为 ExceptionDAO 的特定定义异常,该异常将由 web 服务处理,以向我的用户(移动应用程序)返回正确的消息网络服务。
在阅读了很多关于异常应该如何异常并且不应该在控制流中使用的内容之后,我对如何处理任何错误有了一个混合的理解:
- 对任何可能发生的事情(例如用户名已经存在)使用返回码,因此,为了符合 DAO 模式,请将我的业务对象作为参数传递。我也可以使用一个特定的对来代替返回代码+业务对象。然后,Web 服务将使用返回代码来显示特定消息。
- 对任何我无法预测会发生的事情使用已检查的异常,并让它们冒泡到 Web 服务来处理并向用户返回消息。 (例如,我无法预测的 SQLException:连接中止)
- 在这种情况下,让未经检查的异常也冒泡并显示一种 404 错误。
我还查看了 null 模式,但我认为它不太适合这种特殊情况。 我还担心不要向用户提供太多信息,而是提供有用且直截了当的信息。实际上,网络服务返回的消息将被移动应用程序使用,然后向最终用户显示消息。
我希望我对我遇到的问题足够清楚,我期待您的回答!
【问题讨论】:
-
这是一个重要的话题,但对于 Stack Overflow 问题来说可能过于宽泛!您还可以在programmers.stackexchange.com 上找到一些相关的答案
-
@DNA 没错,我在程序员 stackexchange 上阅读了很多关于我的问题的主题!我还应该把它留在这里吗?
-
我建议只使用 Spring Data 而不是自己编写。
-
@chrylis 好吧,从我目前所看到的情况来看,这一切都可以解决引发异常的问题,这并不是我的问题所在。我想知道我应该一直使用异常还是混合使用异常和返回码。
-
不要使用返回码。如果数据库代码是您自己的,您应该考虑抛出更具体的
SQLException或您自己的自定义异常。您需要确定的另一件事是谁需要减轻异常。例如,如果您尝试写入文件但该文件不存在,您可以执行以下两种操作之一:1) 创建一个空白文件并向其写入数据,或 2) 使用异常作为通知机制用户并让用户决定做什么。如果正确使用异常处理,您的代码会更简单。返回错误代码不是要走的路。
标签: java web-services exception exception-handling dao