Playframework 在Global.java中未调用重写的onHandlerNotFound
我正在尝试覆盖play framework 2.1.1中处理错误的默认行为,但404有问题,基本上我覆盖的onHandlerNotFound似乎没有被调用。当我访问一个不存在的页面时,会返回一个空白页面。有人知道我做错了什么吗?下面是我的Global.javaPlayframework 在Global.java中未调用重写的onHandlerNotFound,playframework,playframework-2.0,Playframework,Playframework 2.0,我正在尝试覆盖play framework 2.1.1中处理错误的默认行为,但404有问题,基本上我覆盖的onHandlerNotFound似乎没有被调用。当我访问一个不存在的页面时,会返回一个空白页面。有人知道我做错了什么吗?下面是我的Global.java import play.GlobalSettings; import play.mvc.Http.RequestHeader; import play.mvc.Result; import play.mvc.Results; import
import play.GlobalSettings;
import play.mvc.Http.RequestHeader;
import play.mvc.Result;
import play.mvc.Results;
import views.html.error;
public class Global extends GlobalSettings {
@Override
public Result onHandlerNotFound(RequestHeader request) {
return Results.notFound(error.render());
}
@Override
public Result onError(RequestHeader request, Throwable t) {
return Results.internalServerError(error.render());
}
}
顺便说一下,onError覆盖正在工作。
谢谢您的代码是有效的并且可以工作,但是这种行为应该是由浏览器引起的。我使用您的代码测试了这一点,转到Firefox中不存在的页面,错误页面被呈现并显示出来 当我尝试使用Internet Explorer时,它会断开(空页) 解决方案相对简单,使用
ok
而不是notFound
:
@Override
public Result onHandlerNotFound(RequestHeader request) {
return Results.ok(error.render());
}
对于一个
badRequest
,我没有测试任何其他的。好的,所以本例中的问题是资产的路由已更改为
GET /*file controllers.Assets.at(path="/public", file)
将其更改回默认值
GET /assets/*file controllers.Assets.at(path="/public", file)
让它再次发挥作用。我不完全理解它为什么停止工作,有人能解释一下吗?如果你还在寻找答案,我认为这应该会有所帮助
@Override
public Promise<SimpleResult> onHandlerNotFound(RequestHeader request) {
return Promise.<SimpleResult>pure(notFound(
views.html.notFoundPage.render(request.uri())
));
}
@覆盖
公共承诺onHandlerNotFound(请求头请求){
返回承诺。纯(未找到)(
views.html.notFoundPage.render(request.uri())
));
}
我遇到了这个问题,我正在使用play 2.3.4,我的解决方案是明确地说结果。notFound(…)
而不仅仅是notFound(…)
这是我的功能
@Override
public F.Promise<Result> onHandlerNotFound(Http.RequestHeader request) {
return F.Promise.<Result>pure(Results.notFound(views.html.notfoundPage.render(request.uri())));
}
@覆盖
公共F.Promise onHandlerNotFound(Http.RequestHeader请求){
返回F.Promise.pure(Results.notFound(views.html.notfoundPage.render(request.uri()));
}
更改后,不要忘记清理项目(
play clean,或activator clean
)。不幸的是,它仍然不起作用。即使我将return语句更改为ok(error.render())。未调用实际的方法。发生404时不会呈现任何页面-只有一个带有404响应代码的空白屏幕。对于与路由文件中的任何规则都不匹配的请求,将调用Global.onHandlerNotFound()方法。好的,通过从路由中删除“assets/”部分,您告诉Play通过默认的assets控制器处理任何请求(与以前的路由不匹配)。因此,您期望404的请求实际上是通过Assets controller进行的,显然,如果找不到静态资产,它只返回一个404,没有任何内容。