gpt4 book ai didi

json - 在 Play 2 中使用 JSON 时出错

转载 作者:行者123 更新时间:2023-12-05 01:09:30 26 4
gpt4 key购买 nike

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

case class Order(id: Pk[Long] = NotAssigned, mfg: String, tp: String)

在我的 Controller 中,我正在尝试构建一个 REST 接口(interface),以便能够以 JSON 形式接受和发送 Order 实例(上图)。在那里,我有以下代码:
  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)
}

但是,当我使用以下命令运行“play test”时,编译失败:

覆盖方法读取 trait Reads of type (json: play.api.libs.json.JsValue)play.api.libs.json.JsResult[anorm.Pk[Long]];
[错误] 方法读取的类型不兼容
[错误] def 读取(json: JsValue):Pk[Long] = Id(json.as[Long])

有谁知道为什么会这样?

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

任何帮助是极大的赞赏!

谢谢

最佳答案

play.api.libs.json.Reads特征定义 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)
}

关于json - 在 Play 2 中使用 JSON 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15731586/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com