我正在使用 Play 2.3 (Java) 框架,我想设置 404 页面。 我知道 GlobalSettings 的 onHandlerNotFound 方法。
但是 Assets 似乎有自己的处理方式 - Assets 类不会调用我的 onHandlerNotFound 方法,只发送空的 404 状态。
我可以以某种方式拦截 Assets 中的错误并设置自己的处理方式吗?
在我看来,任何不存在的 Assets 都会返回空的 404 页面,这是相当有限的。
感谢您的建议。
编辑:一些代码 从路线:
GET /assets/*file controllers.Assets.at(path="/public", file)
来自全局设置:
@Override
public Promise<Result> onHandlerNotFound(RequestHeader arg0) {
return Promise.<Result>pure(Results.notFound(
errPage("notfound")));
}
最佳答案
由于找到了处理程序,因此在全局中重写onHandlerNotFound将不起作用。
对于内置的资源 Controller ,当它找不到文件时,它会使用项目的 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)
)
}
}
关于java - Play Framework - 为 Assets 定义 404 页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29728537/