【问题标题】:Global Exception Handling in play framework java 2.3.7play框架java 2.3.7中的全局异常处理
【发布时间】:2015-06-17 12:20:06
【问题描述】:

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

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

【问题讨论】:

    标签: java exception playframework


    【解决方案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;
        }
    }
    

    只需用这个新的注解来注解你的控制器或你的控制器方法,所有的异常都会被捕获。您可以捕获不同的异常并以不同的方式处理它们。此外,如果您有 Ajax 调用,您不想返回/重定向到网站。

    【讨论】:

      猜你喜欢
      • 2014-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-05
      • 1970-01-01
      • 1970-01-01
      • 2016-11-03
      相关资源
      最近更新 更多