【发布时间】:2014-05-14 14:45:55
【问题描述】:
这不能编译:
package model
import play.api.libs.json._
case class Dog(id: Long, name: String, kind: String) {
def asJson() = Json.toJson(this)
}
object Dog {
implicit val writes = Json.writes[Dog]
}
错误:
53. Waiting for source changes... (press enter to interrupt)
[info] Compiling 1 Scala source to /Users/pablo/projects/mvp/target/scala-2.10/classes...
[error] /Users/pablo/projects/mvp/app/models/model2.scala:7: No Json deserializer found for type model.Dog. Try to implement an implicit Writes or Format for this type.
[error] def asJson() = Json.toJson(this)
[error] ^
[error] one error found
[error] (compile:compile) Compilation failed
更改伴随对象(注意显式类型):
object Dog {
implicit val writes: Writes[Dog] = Json.writes[Dog]
}
解决了这个问题。这是为什么呢?
【问题讨论】:
-
请注意,
Json.writes签名是def writes[A]: Writes[A],因此类型正是显式类型。 -
我对 scala 的了解不够,无法回答这个问题,但
Writes[-A]是逆变的可能很重要。我不知道 Scala 在这种情况下是否可以处理隐式。
标签: json scala playframework playframework-2.2 implicit-conversion