我明白了
找不到类型 T 的 Json 序列化程序。尝试为此类型实现隐式写入或格式。
在
import play.api.libs.json._
trait A[T] {
def foo(t: T) = bar(Json.toJson(t))
}
我将有一个Writes
实际参数类型,但我认为这不会清除编译错误。经过一番谷歌搜索后,我觉得我对这个主题的理解可能缺少一些基本的东西。任何帮助表示赞赏。
我明白了
找不到类型 T 的 Json 序列化程序。尝试为此类型实现隐式写入或格式。
在
import play.api.libs.json._
trait A[T] {
def foo(t: T) = bar(Json.toJson(t))
}
我将有一个Writes
实际参数类型,但我认为这不会清除编译错误。经过一番谷歌搜索后,我觉得我对这个主题的理解可能缺少一些基本的东西。任何帮助表示赞赏。
在这种情况下,错误消息不是很清楚——你不需要Writes
为这种类型实现 a,你只需要向编译器证明你有一个:
import play.api.libs.json._
trait A[T] {
def foo(t: T)(implicit w: Writes[T]) = bar(Json.toJson(t))
}
这将按预期工作。你也可以有一个implicit def w: Writes[T]
in 特征,这将需要实例化器提供一个实例,这更具限制性,因为你不能在没有实例的A
情况下实例化一个,但如果你有很多这样的方法,它在语法上会更简洁一些,并且您实际上可能希望限制更早生效,而不是在您已经A
实例化并且您尝试调用foo
它之后。
提供implicit def writes
import play.api.libs.json._
trait A[T] {
implicit def writes: Writes[T]
def foo(t: T) = bar(Json.toJson(t))
}
或将写入作为implicit
参数提供给foo
import play.api.libs.json._
trait A[T] {
def foo(t: T)(implicit writes: Writes[T]): JsValue = bar(Json.toJson(t))
}