【问题标题】:Should I catch Exceptions and return error() or just throw the Exception from my Controller in the Play Framework我应该捕获异常并返回 error() 还是只是从 Play 框架中的控制器中抛出异常
【发布时间】:2013-01-23 11:06:09
【问题描述】:

我和我的团队对 Play 来说还比较陌生!框架(1.2.5),我们已经创建了相当多的代码,在我们的控制器中看起来与此类似。

public static void list() {
  try {
    List<ActionModel> actions = ActionModel.loadActions();
    render( actions );
  } catch ( Exception ex ) {
    error();
  }
}

异常来自我们的模型层,其中包含一些自定义代码,而不是通常的 Play Framework 模型。我的问题是,可以跳过 try catch 并从控制器方法中抛出异常吗?这实际上是一种更正确的处理方式吗?

【问题讨论】:

    标签: playframework


    【解决方案1】:

    您的代码实际上什么都不做,因为 PlayFramework 将做几乎完全相同的事情,即捕获任何未捕获的异常并调用 error() 以输出 500 内部错误。

    在我的项目中,我们报告任何意外错误,换句话说,通过向开发人员发送电子邮件来报告异常,基本上是一些如下代码:

    public class ErrorHelper extends Controller{
        @Catch(Exception.class) 
        public static void handleException(final Exception e) {
            String errorCode = ErrorHelper.generateErrorCode();
            renderArgs.put("errorCode", errorCode);
            new Job() {
                @Override
                public void doJob() throws Exception {
                    Mail.reportError(errorCode, e);
                }
            }.now();
        }
    }
    

    然后在你的控制器中你需要@With(ErrorHelper.class)

    您还可以自定义您的500.html 文件,方法是向最终用户显示错误代码并要求他们使用它来呼叫技术支持,如果没有例外,应该已经收到一封电子邮件。

    【讨论】:

    • 比什么都不做更糟糕的是,Robin 建议的代码将无法正常工作。 Play 抛出异常来呈现结果。因此,即使没有错误,也会始终调用 catch。
    • 你的说法NOT正确,play会检查Exception是否是play.mvc.Result的实例,只有当它不是结果时,@Catch处理程序才会叫
    • 哦,对不起。我想您应该在问题下方发表评论;-)
    猜你喜欢
    • 2011-04-27
    • 2013-12-24
    • 2011-11-09
    • 1970-01-01
    • 2021-08-20
    • 1970-01-01
    • 2014-06-13
    • 1970-01-01
    • 2018-04-29
    相关资源
    最近更新 更多