在重头戏2中使用JSON时出错

在重头戏2中使用JSON时出错,json,scala,playframework,playframework-2.0,playframework-json,Json,Scala,Playframework,Playframework 2.0,Playframework Json,我正在尝试使用JSON、Play Framework 2.1.0和Scala 2.10进行序列化/反序列化。我正在使用Anorm,我有一个非常简单的对象,我想存储在数据库中。顺序很简单: case class Order(id: Pk[Long] = NotAssigned, mfg: String, tp: String) 在我的控制器中,我试图构建一个REST接口,以便能够接受和发送一个订单实例(如上)作为JSON。在这里,我有以下代码: implicit object PkForma

我正在尝试使用JSON、Play Framework 2.1.0和Scala 2.10进行序列化/反序列化。我正在使用Anorm,我有一个非常简单的对象,我想存储在数据库中。顺序很简单:

case class Order(id: Pk[Long] = NotAssigned, mfg: String, tp: String)
在我的控制器中,我试图构建一个REST接口,以便能够接受和发送一个订单实例(如上)作为JSON。在这里,我有以下代码:

  implicit object PkFormat extends Format[Pk[Long]] {
     def reads(json: JsValue):Pk[Long] = Id(json.as[Long])
     def writes(id: Pk[Long]):JsNumber = JsNumber(id.get)
  }
但是,当我使用以下内容运行“播放测试”时,这无法编译:

重写方法读取类型为(json:play.api.libs.json.JsValue)play.api.libs.json.JsResult[anrom.Pk[Long]]的特征读取; [错误]方法读取的类型不兼容 [error]def读取(json:JsValue):Pk[Long]=Id(json.as[Long])

有人知道为什么会这样吗

我在JAXB方面有很多经验,但我对玩和Scala都是新手,到目前为止我还没有找到任何答案。这似乎是一个非常简单的用例,实际上我希望有一个更简单的解决方案(如注释),但我没有找到一个(至少还没有)

非常感谢您的帮助


谢谢

play.api.libs.json.Reads
trait将
Reads
方法定义为:

def reads(json : play.api.libs.json.JsValue) : play.api.libs.json.JsResult[A]
因此,reads方法的响应应该是
JsResult[A]
,而不是
A
;也就是说,
JsResult[Pk[Long]]
而不是
Pk[Long]
。如果成功,您需要返回以下内容:

implicit object PkFormat extends Format[Pk[Long]] {
    def reads(json: JsValue):JsResult[Pk[Long]] = JsSuccess(Id(json.as[Long]))
    def writes(id: Pk[Long]):JsNumber = JsNumber(id.get)
}