在Play Framework中的onError()之后没有发送结果

时间:2014-03-04 16:03:53

标签: java playframework-2.0 playframework-2.2

我正在使用Play 2.2.1。 在我的Global类中,我将onError() - 方法覆盖如下:

public Promise<SimpleResult> onError(RequestHeader request, Throwable t) {
    Logger.info("onError reached");
    return Promise.<SimpleResult>pure(internalServerError(t.getMessage()));
}

因此,与documentation相比,我的代码只略有修改。

发生异常后,它会出现在日志记录中,并且还会记录“onErrorError”。然而,似乎结果从未发送给客户端,因为它仍在等待答案。

如果发生错误,如何将internalServerError-Result发送回客户端?

作为解决方法,我执行以下操作:

 public static Result someAction() {
      try{
           ...
      } catch (Exception ex) {
        Logger.error(ex.getMessage(), ex);
        return internalServerError(ex.getMessage());
      }
  }

我真的很想避免这种情况,因为我觉得它很难看,但至少它似乎有效。使用这种方法是否存在任何可能的问题(除非必须针对每个行动重复)?

1 个答案:

答案 0 :(得分:1)

重新检查,它对我有用。

我注意到的一个小问题 - 你在onError中的return语句缺少一个结束括号,但我认为这不是你的代码编译后的问题。

这是我的工作代码:

控制器:

package controllers;

import play.mvc.*;

public class Application extends Controller {
    public static Result index() {
        throw new RuntimeException("boom!");
    }
}

全局:

import play.GlobalSettings;
import play.Logger;
import play.libs.F.Promise;
import play.mvc.Http.RequestHeader;
import play.mvc.Results;
import play.mvc.SimpleResult;

public class Global extends GlobalSettings {
    public Promise<SimpleResult> onError(RequestHeader request, Throwable t) {
        Logger.info("onError reached");
        return Promise.<SimpleResult> pure(Results.internalServerError(t.getMessage()));
    }
}