【问题标题】:best approach and practices to handle exceptions in Spring? [closed]在 Spring 中处理异常的最佳方法和实践? [关闭]
【发布时间】:2013-09-01 20:10:54
【问题描述】:

过去几个月我一直在用 Spring + hibernate 开发一个 web 应用程序。 我一直严重缺少的是异常处理。

我想知道处理异常的最佳方法和实践? 我有一些问题无法涵盖异常处理的所有方面,例如:

1.是否做checked or unchecked Exception?如何决定?

2.Controller中产生的异常如何处理和处理。

3.Service层和DAO层产生的异常怎么办?应该只在该层处理还是应该在该层处理 转移到控制器层?

4.既然可能有很多例外,我该如何准备处理将来可能出现的情况?

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

请推荐或提供好的博客链接?

【问题讨论】:

    标签: java hibernate spring-mvc


    【解决方案1】:
    1. 如果合理预期客户端可以处理异常并从异常中恢复,则使用已检查异常,否则使用未检查(您将主要使用未检查)。
    2. 在方法上使用@ExceptionHandler 注释来处理由@RequestMapping 方法生成的异常。
    3. throw 将它们发送给控制器,以便它可以决定最佳响应,除非服务方法实际上可以从异常中恢复并正常继续处理。
    4. 创建自定义异常并改为throw(您可以将实际异常作为原因传递,即throw new MyCustomException("my message", e)
    5. 您的@ExceptionHandler 方法可以决定返回给用户的视图,或者您可以在web.xml 中配置自定义错误页面

    【讨论】:

    • 感谢您的解释。您的建议非常好,您能提供一些具体的例子吗?可能是一些链接。
    【解决方案2】:
    1. 一般不要使用受检异常,也不想使用异常进行流控制,除此之外,大多数异常都是不可恢复的,那你打算怎么办?见this related answer

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

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

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

    有关更多信息,您可能需要查看 Spring 参考指南中的 the exception handling section

    【讨论】:

    • 你好。这些建议非常好,但实际上我在异常处理方面很薄弱。我需要修改概念吗?有什么建议吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-07
    • 2018-01-03
    • 1970-01-01
    • 1970-01-01
    • 2013-01-13
    • 2017-05-11
    • 2013-05-09
    相关资源
    最近更新 更多