play框架java 2.3.7中的全局异常处理

时间:2015-06-17 12:20:06

标签: java exception playframework

我正在尝试使用Java在Play框架(RESTful)中实现全局异常处理。在搜索时我发现扩展GlobalSettings并覆盖onError方法应该处理所有错误并提供适当的响应/视图。但是在我执行"激活器运行"的控制台中,我仍然得到异常的丑陋堆栈跟踪。有没有办法停止打印堆栈跟踪或Play框架真的处理异常?

    @Override
    public Promise<Result> onError(RequestHeader request, Throwable t) {
       return Promise.<Result>pure(Results.status(200, tr.getLocalizedMessage()));
    }

1 个答案:

答案 0 :(得分:1)

我有同样的问题。不知何故,日志记录的发生与Global中的onError()方法无关。我用Action composition解决了这个问题。

public class VerboseAction extends play.mvc.Action.Simple {

    public F.Promise<Result> call(Http.Context ctx) throws Throwable {
        Promise<Result> call;
        try {
            call = delegate.call(ctx);
        } catch (Exception e) {
            Logger.error("Exception during call " + Controller.request().uri()
                    + ": " + e.getMessage(), e);
            call = Promise.<Result> pure(redirect(controllers.routes.Home
                    .error(e.getMessage())));
        }
        return call;
    }
}

只需使用这个新注释注释您的Controller或Controller方法,就会捕获所有异常。您可以捕获不同的异常并以不同方式处理它们此外,如果您有Ajax调用,则不希望返回/重定向到网站。