我正在使用Play 2.3(Java)框架,我想设置一个404页面。 我知道GlobalSettings的onHandlerNotFound方法。
但资产似乎有自己的处理 - 资产类没有调用我的onHandlerNotFound方法,只发送空404状态。
我可以以某种方式拦截资产中的错误并设置我自己的处理吗?
在我看来,相当于限制任何不存在的资产都会返回空的404页面。
感谢您的任何建议。
编辑:一些代码 来自路线:
GET /assets/*file controllers.Assets.at(path="/public", file)
来自GlobalSettings:
@Override
public Promise<Result> onHandlerNotFound(RequestHeader arg0) {
return Promise.<Result>pure(Results.notFound(
errPage("notfound")));
}
答案 0 :(得分:1)
在全局范围内覆盖 onHandlerNotFound 将无法使用,因为找到了处理程序。
对于内置资源控制器,当它找不到文件时,它会使用项目的HttpErrorHandler的onClientError来显示结果。
您可以在此处查看自定义:
Java:https://www.playframework.com/documentation/2.5.x/JavaErrorHandling
斯卡拉:https://www.playframework.com/documentation/2.5.x/ScalaErrorHandling
这是一个Scala示例:
import play.api.http.HttpErrorHandler
import play.api.mvc._
import play.api.mvc.Results._
import scala.concurrent._
import javax.inject.Singleton;
@Singleton
class ErrorHandler extends HttpErrorHandler {
def onClientError(request: RequestHeader, statusCode: Int, message: String) = {
Future.successful(
// Your custom error page can go here.
Status(statusCode)("A client error occurred: " + message)
)
}
}
答案 1 :(得分:0)
我认为这是一个与另一个主题中提出的问题非常类似的问题。
如果您正在使用资产,我认为它们是文件之类的对象?如果是这样,您需要从这里看一下解决方案的第二部分:
How to create a custom 404 page handler with Play 2.0?
Andrew E写的关于“Real Handler找不到对象”的场景。该部分是关于请求一个根本不存在的对象的用户。