4

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

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

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

4

1 回答 1

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通过向最终用户显示错误代码并要求他们使用它来呼叫技术支持来自定义您的文件,如果没有例外,应该已经收到一封电子邮件。

于 2013-01-23T11:38:07.893 回答