播放框架onHandlerNotFound方法

时间:2013-12-29 06:13:32

标签: scala global playframework-2.1

我正在使用Play framework 2.1.1,当我尝试添加一个Global对象来处理BadRequest,HandlerNotFound等某些情况时,我遇到了一个奇怪的错误:

以下是我的Global.scala的样子:

object Global extends GlobalSettings {

  override def onStart(app: Application) {
    Logger.info("Application has started")
  }

  override def onStop(app: Application) {
    Logger.info("Application shutdown...")
  }

  override def onHandlerNotFound(request: RequestHeader): Result = {
    NotFound(
      views.html.common.notFoundPage(request.path)
    )
  }
}

以下是我开始申请时所看到的内容:

overriding method onHandlerNotFound in trait GlobalSettings of type (request: play.api.mvc.RequestHeader)scala.concurrent.Future[play.api.mvc.SimpleResult]; method onHandlerNotFound has incompatible type 

它实际上在编译时失败并且吐出上面的错误。这背后的原因是什么?我很困惑,因为我的IntelliJ没有显示任何错误!

1 个答案:

答案 0 :(得分:1)

您确定在构建项目时使用的是Play Framework 2.1吗?

2.1 branch确实在GlobalSettings中定义:

def onHandlerNotFound(request: RequestHeader): Result

虽然2.2 branch读取:

def onHandlerNotFound(request: RequestHeader): Future[SimpleResult]

也许您在IntelliJ和构建脚本中配置了不同的版本?

对于2.2版本,你可以写:

override def onHandlerNotFound(request: RequestHeader): Future[SimpleResult] = {
  Future.successful(NotFound(
    views.html.common.notFoundPage(request.path)
  ))
}