【发布时间】:2013-05-29 18:53:22
【问题描述】:
我知道关于异常处理的讨论很多,但是我需要一些针对我的具体情况的建议。
我目前正在开发一个带有Controller->Services->DAO 层的Spring MVC 应用程序。服务类主要捕获HibernateException和IOException两种异常。
HibernateException 因为如果事务不成功,服务需要执行回滚,IOException 因为它是未经检查的异常,需要被捕获或抛出,我更喜欢第一个选项。
现在有什么更好的方法在堆栈中进一步处理这些问题:
- 我是否应该将这些异常重新抛出到控制器并在
控制器的
ExceptionHandler发送 HTTP 错误代码 500 - 或者在 catch 块中创建普通的
JSON response对象,设置status=failure和相应的错误消息并将其返回给控制器?
【问题讨论】:
-
你应该坚持你的观点 1。
-
IOException在技术上不是未经检查的异常;什么意思? -
如果您无法以其他方式处理它们,我会捕获已检查的异常并重新将它们包装为自定义运行时异常。
-
为什么不两者兼而有之?如果前端想让 JSON 报错,可以作为 500 return 的 body 返回。
-
我个人使用@Transaction 注释并让它处理回滚并将Hibernate 异常排除在我的服务层之外。在我的服务层中没有说“休眠”。这样做我使用第二种方法,只返回一个 JSON 响应,详细说明正在发生的事情。
标签: java spring-mvc exception-handling