我应该捕获异常并返回error(),或者只是从Play Framework中的Controller中抛出异常

时间:2013-01-23 11:06:10

标签: playframework

我和我的团队对Play来说相对较新!在框架(1.2.5)中,我们创建了大量代码,这些代码在我们的控制器中看起来与此类似。

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

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

1 个答案:

答案 0 :(得分:5)

您的代码实际上什么都不做,因为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文件,并要求他们使用它来致电技术支持,如果没有例外,应该已经收到了电子邮件。