【问题标题】:overriding method read in trait Reads.特征读取中的重写方法读取。
【发布时间】:2013-03-14 12:11:49
【问题描述】:

我正在实现这个 User.scala 类

class User(var id : Long , var name : String) {

 def createUser() = {}

 def setName(nome : String) : String = {
    this.name = nome
    return name
 }

 def getName() : String = {
    return name
 }
}

object User {

implicit object userFormat extends Format[User] {

  override def reads(json: JsValue): User = new 
  User(

      (json \ "id").as[Long],

      (json \ "name").as[String]

  )

   override def writes(s: User): JsValue = JsObject(Seq(
        "id" -> JsString(s.id.toString),
        "name" -> JsString(s.name)
    ))   
  }
}

但是在读取方法时出现此错误: 覆盖方法读取 trait 读取类型 (json:play.api.libs.json.JsValue)play.api.libs.json.JsResult[models.User];
方法读取的类型不兼容

我不想使用案例类(否则问题将得到解决), 有人可以给我一个提示吗?

谢谢。

【问题讨论】:

  • 正如签名所暗示的,该方法应该返回JsResult[T],而您返回的是裸露的T...至少我一眼就能看出这一点。

标签: json scala


【解决方案1】:

您应该将“用户”对象包装在 JsResult 中,在本例中为 JsSuccess

JsSuccess(new User(...))

【讨论】:

  • 谢谢,我尝试了您的解决方案,但是当我运行测试时,它在 [error] models.User$userFormat$.reads(User.scala:50) [error] models 处出现错误。 User$userFormat$.reads(User.scala:43),这是我包装“用户”对象的地方。
  • 抱歉,您的解决方案很好。我刚刚修复了一个愚蠢的错误。非常感谢你。我不知道为什么我没有尝试用 JsSuccess 包装它。
  • 嗨,我知道你是新来的。如果您认为某个答案解决了问题,请单击绿色复选标记将其标记为“已接受”。这有助于将注意力集中在仍然没有答案的旧 SO。
猜你喜欢
  • 1970-01-01
  • 2016-03-26
  • 2014-11-17
  • 1970-01-01
  • 1970-01-01
  • 2017-06-30
  • 1970-01-01
  • 2013-11-29
  • 2016-07-26
相关资源
最近更新 更多