nop*_*lay 4 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)
Run Code Online (Sandbox Code Playgroud)
在我的控制器中,我正在尝试构建一个REST接口,以便能够接受并发送一个Order实例(上面)作为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)
}
Run Code Online (Sandbox Code Playgroud)
但是,当我使用以下命令运行"play test"时,这无法编译:
重写方法读取特征读取类型(json:play.api.libs.json.JsValue)play.api.libs.json.JsResult [anorm.Pk [Long]]; [error]方法读取有不兼容的类型[错误] def读取(json:JsValue):Pk [Long] = Id(json.as [Long])
有谁知道为什么会这样?
我在JAXB方面有很多经验,但我对Play和Scala都是新手,到目前为止我还没有找到任何答案.这看起来像一个非常简单的用例,实际上我希望有一个更简单的解决方案(如Annotations),但我找不到(至少还没有)
任何帮助是极大的赞赏!
谢谢
play.api.libs.json.Reads
trait将reads
方法定义为:
def reads(json : play.api.libs.json.JsValue) : play.api.libs.json.JsResult[A]
Run Code Online (Sandbox Code Playgroud)
因此,预期读取方法的响应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)
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1441 次 |
最近记录: |