Playframework 我应该捕获异常并返回error(),还是从Play框架中的控制器抛出异常

Playframework 我应该捕获异常并返回error(),还是从Play框架中的控制器抛出异常,playframework,Playframework,我和我的团队对这出戏来说都是比较新的!框架(1.2.5),我们已经创建了大量代码,这些代码在我们的控制器中看起来与此类似 public static void list() { try { List<ActionModel> actions = ActionModel.loadActions(); render( actions ); } catch ( Exception ex ) { error(); } } public静态作废列表(){

我和我的团队对这出戏来说都是比较新的!框架(1.2.5),我们已经创建了大量代码,这些代码在我们的控制器中看起来与此类似

public static void list() {
  try {
    List<ActionModel> actions = ActionModel.loadActions();
    render( actions );
  } catch ( Exception ex ) {
    error();
  }
}
public静态作废列表(){
试一试{
List actions=ActionModel.loadActions();
提出(行动);
}捕获(例外情况除外){
错误();
}
}

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

您的代码实际上什么都不做,因为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();
    }
}
然后在控制器中,您需要使用(ErrorHelper.class)


此外,您还可以通过向最终用户显示错误代码来定制
500.html
文件,并要求他们使用错误代码致电技术支持,如果没有例外,技术支持应该已经收到电子邮件

比什么都不做更糟糕的是,罗宾建议的代码无法正常工作。Play抛出异常以渲染结果。因此,即使没有错误,也将始终调用catch。您的语句不正确,play将检查异常是否是
play.mvc.Result
的实例,只有当它不是结果时,才会调用
@catch
处理程序,对此表示抱歉。我想你应该在问题下面发表评论;-)