Scala Play Framework,如何处理未知的URL

时间:2015-09-02 10:00:28

标签: scala playframework routes

嘿我正在研究scala play框架,我需要做的是,当有人输入一些random(unknown) url时,路由文件中没有定义它们,需要将它们路由到另一个未找到的页面,与404 page not found http header response。而不是将整个路径文件显示为错误。

使用sbt:sbt launcher version 0.13.8

使用scala:scalaVersion := "2.11.6" 使用play框架2x

Action not found

4 个答案:

答案 0 :(得分:1)

您可以在Global.scala / Global.java文件中覆盖这些内容。对于Java,可能看起来类似于:

public F.Promise<Result> onHandlerNotFound(Http.RequestHeader request) {
    return F.Promise.<Result>pure(notFound(
            Messages.get("error.routeNotFound")
    ));
}

答案 1 :(得分:0)

我猜您正在寻找Global.scala的Scala代码来显示您自己的404页面。

Global.scala应位于您的/views文件夹下。并覆盖其中的onHandlerNotFound方法,如下所示:

override def onHandlerNotFound(request: RequestHeader) = {
  var cookies: Seq[Cookie] = Seq()
  Future.successful(NotFound("hello world!!!!").withCookies(cookies:_*))
}

NotFound是一种PageCtrl.Status方法,可能需要在Global.scala的顶部导入。您可以尝试使用NotFound("Hello World")查看发生了什么。它将显示纯文本"hello world",而不是默认的404页面。

所以最终的代码应该像

override def onHandlerNotFound(request: RequestHeader) = {
  var cookies: Seq[Cookie] = Seq()
  Future.successful(NotFound(view.html.yourOwn404PageHtml).withCookies(cookies:_*))
}

withCookies仅用于创建Result对象。您可以使用属于NotFound()的其他方法。

答案 2 :(得分:0)

在Play2.6中,您可以使用以下代码处理未知/中断的API调用购买。

int a[] = new int[n];
for (int i = 0; i < a.length - 1; i++)
{
     if (a[i] > a[i + 1])
    {
         c++;
    }
}

答案 3 :(得分:-1)

您可以使用自定义的ErrorHandler返回json格式的错误消息,状态代码或状态代码或空白页面。

package errors

import play.api.http.HttpErrorHandler
import play.api.mvc._
import play.api.mvc.Results._
import scala.concurrent._
import javax.inject.Singleton

@Singleton
class MyErrorHandler extends HttpErrorHandler {

  def onClientError(request: RequestHeader, statusCode: Int, message: String) = {
    Future.successful(
      Ok() // Replace with your error handle here
    )
  }

  def onServerError(request: RequestHeader, exception: Throwable) = ???
}

在application.conf中

play.http.errorHandler = "errors.MyErrorHandler"

您可以在playframework文档中找到详细信息。 https://www.playframework.com/documentation/2.6.x/ScalaErrorHandling