在Spring中处理异常的最佳方法和实践?

时间:2013-08-29 11:49:13

标签: java hibernate spring-mvc

我在Spring + hibernate中开发了一个最近几个月的Web应用程序。 我一直严重缺少的是异常处理。

我想知道处理异常的最佳方法和实践吗? 我脑子里有一些问题,不能涵盖异常处理的所有方面,如:

1.是否进行选中或未选中的例外情况?如何决定?

2.如何处理以及如何处理Controller中生成的异常。

3.在服务层和DAO层中生成的异常是什么?应该只在该层中处理它们还是应该在     转移到控制器层?

4.由于可能有许多例外情况,我怎么能准备好处理将来可能发生的事情呢?

5.如何向UI或浏览器显示相关消息?

请建议或提供好博客的链接?

2 个答案:

答案 0 :(得分:11)

  1. 如果有合理的期望客户可以处理并从异常中恢复,请使用Checked Exceptions,否则使用Unchecked(您将主要使用未选中)。
  2. 在方法上使用@ExceptionHandler注释来处理从@RequestMapping方法生成的异常。
  3. throw他们到控制器,以便它可以决定最佳响应,除非服务方法实际上可以从异常中恢复并继续正常处理。
  4. 改为创建自定义例外和throw(您可以将实际例外作为原因传递,throw new MyCustomException("my message", e)
  5. 您的@ExceptionHandler方法可以决定返回给用户的视图,也可以在web.xml
  6. 中配置自定义错误页面

答案 1 :(得分:5)

  1. 一般情况下,不要使用已检查的异常,您不希望对流量控制使用异常,旁边大多数异常都是不可恢复的,那么您打算做什么?请参阅this related answer

  2. 关于异常处理,spring对thatHandlerExceptionResolver。您可以将其用于一般异常处理。对于更精细的控制,您可以使用@ExceptionHandler在控制器中注释方法,这些方法仅处理从该控制器发生的异常。 (尽管使用新的@ControllerAdvice ,您还可以注册全局@ExceptionHandler方法。

  3. 在某些情况下,您可能希望在控制器中捕获异常并在控制器内处理它们(例如,向用户显示警告)。

  4. 作为最后的手段,您始终可以在web.xml中配置error-page,以进行非常通用和广泛的异常处理。

    有关详细信息,您可能需要查看“Spring参考指南”中的the exception handling section