使用Play Scala api和Json序列化对象

jok*_*okr 3 json scala jackson playframework-2.0 playframework-json

我尝试使用Scala到Json在play 2.0应用程序中序列化我的模型.这是我的代码的样子:

package models

import play.api.libs.json._

case class Task(id: Long, label: String, date: String)

object Task {

  ...

  implicit object TaskFormat extends Format[Task] {
    def reads(json: JsValue): Task = Task(
      (json \ "id").as[Long],
      (json \ "label").as[String],
      (json \ "date").as[String])

    def writes(t: Task): JsValue = JsObject(Seq(
      "id" -> JsNumber(t.id),
      "label" -> JsString(t.label),
      "date" -> JsString(t.date)))
  }
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,运行应用程序时出现以下错误:

verriding method reads in trait Reads of type (json: play.api.libs.json.JsValue)play.api.libs.json.JsResult[models.Task]; method reads has incompatible type
Run Code Online (Sandbox Code Playgroud)

我还没有找到解决方案.api的文档(http://www.playframework.org/documentation/api/2.0/scala/play/api/libs/json/package.html)似乎也暗示了我采取的方法.

有人发现我的错误吗?

非常感谢,
乔尔

Rex*_*err 6

错误消息告诉您问题所在:返回类型必须是

play.api.libs.json.JsResult[models.Task]
Run Code Online (Sandbox Code Playgroud)

所以它看起来像你Task直接返回,而不是包装它JsResult.

我不使用Play,但这是编译器试图告诉你的.

那么,鉴于此,问题是什么?如果您查看Play 2.0文档,它会reads返回a T.但是,如果您查看GitHub源代码,您会发现它已更改为JsResult[T]截至2012年8月21日.

因此,您使用的是比人们提出的建议更新的版本.

我不确定较新的API是否在线,但您可以在此处浏览JSON源.