我使用Struts,Spring和Hibernate开发了一个应用程序。
我的DAO使用spring jdbc,它的所有方法都抛出DataAccessException(取消选中)。
我应该在哪里处理此例外情况?我知道这是一个未经检查的异常,但我想我需要告诉用户数据库或它的连接是否有问题。
我想我应该从我的服务类方法中重新抛出DataAccessException,以便被Controller捕获。 这是一个好习惯吗?
我查看了Spring包中的示例,但未在域或服务区域中找到任何异常处理。离开dao区域后,似乎忽略了DataAccessException。
请为此事建议一个好的设计。
答案 0 :(得分:13)
离开dao区域后,似乎忽略了DataAccessException。
这是件好事!让它飞过整个堆栈。您可能在服务层上有事务 - 该异常将透明地导致回滚最外层事务。太好了!
现在它将找到通往控制器的方式。如果你在Struts控制器中捕获它,你可以例如回归不同的观点。但很可能你并不想在每一个Struts动作中处理异常。所以让异常更进一步。在某些时候,Struts将捕获该异常并尝试处理它。 Struts有一些复杂的错误处理机制,您可以找到大量有关它们的信息。通常,它会根据异常类型调用一些自定义操作或错误屏幕。
最后,即使Struts无法处理异常,它也会被重新引入容器,导致HTTP 503返回异常详细信息。
正如您所看到的,您可以在很多级别上控制异常,通常越低越好。
答案 1 :(得分:0)
引发异常也是一项昂贵的操作。 这是一个很好的选择,它可以在服务层本身捕获异常,并基于异常,生成响应并将其发送到控制器。 开发应用程序时,开发人员始终具有更好的主意,即他/她必须处理哪种类型的异常。因此,捕获异常并将其转换为适当的响应是一个不错的选择。