java - play framework java 2.3.7 中的全局异常处理

标签 java exception playframework

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

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

最佳答案

我遇到了同样的问题。日志记录以某种方式独立于 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 调用,您不想返回/重定向到网站。

关于java - play framework java 2.3.7 中的全局异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30891447/

相关文章:

java - JVM 验证错误 'Illegal type at constant pool'

java - Grails:groovy.sql.Sql 和 Model.withTransaction 会发生什么?

c++ - MongoDB C++ 驱动程序不抛出连接错误

c# - C# 中的内联 'try' 语句可能吗?

java - Play Framework : Generate PDF from template that uses Javascript for graphing

windows - 为什么 Play 在 Windows 上为类报告 java.lang.NoClassDefFoundError(而在 Linux 上运行良好)?

java - Java 世界中以下 .NET 概念(ASP.NET、IIS、Linq 等)的等价物是什么?

java - 结果集耗尽 Oracle 查询

java - Servlet/JSP 流程控制 : Enums, 异常,还是其他原因?

java - Play Framework :[RuntimeException:java.lang.reflect.InvocationTargetException]