Play框架 - 为资产定义404页面

时间:2015-04-19 10:21:50

标签: java playframework

我正在使用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")));
}

2 个答案:

答案 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找不到对象”的场景。该部分是关于请求一个根本不存在的对象的用户。