【问题标题】:Play Framework - define 404 page for assetsPlay Framework - 为资产定义 404 页面
【发布时间】:2016-08-02 18:21:44
【问题描述】:

我正在使用 Play 2.3 (Java) 框架,我想设置一个 404 页面。 我知道 GlobalSettings 的 onHandlerNotFound 方法。

但资产似乎有自己的处理方式——资产类不调用我的 onHandlerNotFound 方法,只发送空的 404 状态。

我能否以某种方式拦截资产中的错误并设置自己的处理方式?

在我看来,任何不存在的资产都会返回空的 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")));
}

【问题讨论】:

    标签: java playframework


    【解决方案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)
        )
      }
    }
    

    【讨论】:

      【解决方案2】:

      我认为这是一个与其他帖子中提出的问题非常相似的问题。

      如果您使用资产,我假设它们是一些对象,如文件?如果是这样,您需要从这里查看解决方案的第二部分:

      How to create a custom 404 page handler with Play 2.0?

      Andrew E 写的关于“Real Handler can't find object”场景的文章。那部分是关于用户请求一个根本不存在的对象。

      【讨论】:

      • 感谢您的回复,但链接中提到了自定义控制器。我需要拦截内置 Assets 类的错误处理。我查看了它的来源,它使用了一些 HttpErrorHandler 类型的 errorHandler,但由于我只了解 Java 而不是 Scala,所以我不明白它是如何初始化的,以及它是否可以以某种方式改变。有人在哪里可以配置吗?
      • 您能否发布一些代码以更好地了解您要完成的工作?
      • 我在最初的帖子中添加了一些代码 sn-ps。但是要指定我想要的:如果有人去 /sandkja,则不会选择任何路线并调用 GlobalSettings.onHandlerNotFound,并呈现一些错误页面。但是,如果有人去 /assets/njdfhew,Assets 控制器会处理该操作,并且它有自己的错误处理 - 如果找不到状态为 404 的空页面。我想以某种方式将 errorHandler 注入 Assets 类,所以我可以为资产目录中未找到的 url 自定义错误消息。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-16
      • 2019-04-18
      • 1970-01-01
      • 1970-01-01
      • 2014-11-30
      • 1970-01-01
      相关资源
      最近更新 更多