Play使用泛型类型参数写入

时间:2016-04-17 16:50:25

标签: json scala playframework

我有一个特征Processor,如下所示:

trait Processor[A] {
  def process(in: Seq[Byte]): Result[A]
}

trait Result[A]{
  val ok: Boolean
  val errorMessage: Option[String]
  val data: Option[A]
}

具体实施:

class StringProc extends Processor[String] {
  def process(in: Seq[Byte]): StrResult
}

case class StrResult(...) extends Result[String]
object StrResult {
  implicit val writes = Json.writes[StrResult]
}

使用StringProc实例作为Processor[String]类型时,process的返回类型不出所料是Result[String],而不是StrResult。不幸的是,Writes[StrResult]在这种情况下似乎毫无用处:

  

找不到类型为Result [String]

的Json序列化程序

我怎么能处理这种情况?

1 个答案:

答案 0 :(得分:6)

你可以尝试

object Result {
  implicit def resWrites[T](implicit nested: Writes[T]): Writes[Result[T]] = OWrites[Result[T]] { res =>
    Json.obj("ok" -> res.ok, "errorMessage" -> res.errorMessage,
      "data" -> nested.writes(res.data))
  }
}