【发布时间】:2017-03-19 02:28:02
【问题描述】:
根据[1],
“在决定检查异常与未检查异常时,请询问 自己,当异常发生时,客户端代码可以采取什么行动 发生?如果客户端代码无法执行任何操作,请将其设为未选中 例外。如果客户端代码需要一些有用的恢复 根据异常中的信息采取行动,使其成为选中状态 例外。”
我明白了整体的想法。但是,我的困惑是,“客户端代码”是什么意思。假设我正在编写一个 REST API,它有一个调用实际后端层的服务层(我也在其中进行验证)。
API User --calls--> { |Service Layer| --internally calls--> |Backend Layer| }
- 那么 API 用户也被视为“客户端代码”?
- 对于请求验证,我应该抛出 Checked 还是 Unchecked Exceptions?
- 是避免使用检查异常的最佳做法吗?
- 是否可以在验证中抛出未经检查的异常,让它冒泡,并在服务层的自定义异常中捕获和包装它? (并使用 JAX-RS ExceptionMapper [3] 向 API 用户展示)
参考资料:
[1]http://www.onjava.com/pub/a/onjava/2003/11/19/exceptions.html
[2]http://archive.oreilly.com/pub/post/avoiding_checked_exceptions.html
[3]https://docs.oracle.com/javaee/6/api/javax/ws/rs/ext/ExceptionMapper.html
【问题讨论】:
-
REST API 用户是使用 HTTP 访问服务的客户端,对吧?因此,Java 的异常语义在这种情况下是无关紧要的——如果发生故障,客户端只会收到 HTTP 错误代码。
标签: java exception checked-exceptions unchecked-exception