在重头戏2中使用JSON时出错
我正在尝试使用JSON、Play Framework 2.1.0和Scala 2.10进行序列化/反序列化。我正在使用Anorm,我有一个非常简单的对象,我想存储在数据库中。顺序很简单:在重头戏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
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)
}