嘿我正在研究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
答案 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