【发布时间】:2013-11-22 02:51:07
【问题描述】:
播放 2.2.1,scala 2.10
// PersonModel.scala
case class PersonModel(name: String, age: Long)
object PersonModel2 {
implicit object PersonModelFormat extends Format[PersonModel] {
def reads(json: JsValue): PersonModel = PersonModel(
(json \ "name").as[String],
(json \ "age").as[Long])
def writes(u: PersonModel): JsValue = JsObject(List(
"name" -> JsString(u.name),
"age" -> JsNumber(u.age)))
}
sbt 说
[error] PersonModel.scala:15: overriding method reads in trait Reads of type (json: play.api.libs.json.JsValue)play.api.libs.json.JsResult[models.PersonModel];
[error] method reads has incompatible type
[error] def reads(json: JsValue): PersonModel = PersonModel(
[error] ^
【问题讨论】:
-
解释为什么会出现错误:编译器实际上是在告诉您您正在尝试覆盖方法读取(在 Reads 特征中定义)返回 不同 类型定义的那个。您应该返回一个 JsResult[PersonModel]。因此,您可以使用 JsSuccess(PersonModel(..., ...)) 包装对 PersonModel 构造函数的调用并更改方法的返回类型!
标签: scala playframework