定义了内部错误页面在哪里

时间:2017-01-12 06:55:23

标签: scala playframework

我在哪里可以找到OkBadRequestInternalServerErrorNotFound等方法的实现?

我查看了播放文档,但无法找到它。具体来说,我看了Results.class,但那里的实现似乎与预期不同。例如,我们在代码中使用的Ok方法接受如下参数:

Ok(views.html.index("Welcome")(userForm))

OkResults.class的实施是

val Ok : Results.this.Status = { /* compiled code */ }

1 个答案:

答案 0 :(得分:0)

在Scala中(在Play 2.5.x的例子中,其他版本的想法也类似):

Ok的来源(BadRequest非常相似):https://github.com/playframework/playframework/blob/2.5.x/framework/src/play/src/main/scala/play/api/mvc/Results.scala#L497

/** Generates a ‘200 OK’ result. */
val Ok = new Status(OK)

因此,Ok是对象,Ok("some string")是函数表示法中的对象。在对象表示法中,它是Ok.apply("some string")

Status代码的来源:https://github.com/playframework/playframework/blob/2.5.x/framework/src/play/src/main/scala/play/api/mvc/Results.scala#L362-L379

apply

Status代码是

/**
 * Set the result's content.
 *
 * @param content The content to send.
 */
def apply[C](content: C)(implicit writeable: Writeable[C]): Result = {
  Result(
    header,
    writeable.toEntity(content)
  )
}

然后您可以转到Writeable班级:https://github.com/playframework/playframework/blob/2.5.x/framework/src/play/src/main/scala/play/api/http/Writeable.scala

对于不同类型,有许多writables,例如String

implicit def wString(implicit codec: Codec): Writeable[String] = Writeable[String](str => codec.encode(str))
您可以在此处找到

Codec实施:https://github.com/playframework/playframework/blob/2.5.x/framework/src/play/src/main/scala/play/api/mvc/Results.scala#L278-L306