我使用Struts,Spring和Hibernate开发了一个应用程序。
我的DAO使用Spring jdbc,它的所有方法都抛出DataAccessException(这是未检查的(。
我应该在哪里处理此异常?我知道这是一个未经检查的异常,但我认为我需要告诉用户数据库是否有问题或连接问题。
我想我应该从我的服务类方法中重新抛出 DataAccessException,以便被控制器捕获。这是一个好的做法吗?
我查看了 Spring 包中的示例,在域或服务区域中没有找到任何异常处理。数据访问异常似乎在离开道区后被忽略了。
请为此事提出一个好的设计。
数据访问异常似乎在离开道区后被忽略了。
这是一件好事!让它在整个堆栈中飞下来。您可能在服务层上有事务 - 异常将透明地导致最外层的事务回滚。伟大!
现在它将找到通往控制器的途径。如果您在 Struts 控制器中捕获它,则可以返回不同的视图。但很可能您不想在每个 Struts 操作中处理异常。所以让例外飞得更远。在某些时候,Struts 会捕获该异常并尝试处理它。Struts有一些复杂的错误处理机制,你会发现很多关于它们的信息。通常,它会根据异常类型调用一些自定义操作或错误屏幕。
最后,如果即使 Struts 也无法处理异常,它也将被重新抛出到容器中,从而导致返回带有异常详细信息的 HTTP 503。
如您所见,您可以在很多级别上控制异常,通常越低越好。
引发异常也是一项代价高昂的操作。在服务层本身捕获异常并根据异常生成响应并将其发送到控制器是一个不错的选择。在开发应用程序时,开发人员总是知道他/她必须处理哪种类型的异常。因此,捕获异常并将其转换为适当的响应是一个不错的选择。