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