我正在尝试将此模型转换为Json,但我总是收到错误“找不到匹配unapply参数的应用函数”。
我试图实现两个不同的写作,但两个都不起作用。
这是我的模特:
case class Page[T](
var data: List[T],
var previous: String,
var next: String,
var totalPageCount: Int)(implicit val tWrites: Writes[T])
object Page {
// Both Writters generate an "No apply function found matching unapply parameters" error
implicit val pageWrites = Json.writes[Page[_]]
implicit def pageWriter[T]: Writes[Page[T]] = new Writes[Page[T]] {
def writes(o: Page[T]): JsValue = {
implicit val tWrites = o.tWrites
val writes = Json.writes[Page[T]]
writes.writes(o)
}
}
}
有没有人有解决方案?
答案 0 :(得分:4)
如果可能,语法可能如下所示:
implicit def pageWrites[T: Writes]: Writes[Page[T]] = Json.writes[Page[T]]
不幸的是,这不适用于JSON Inception(位于Json.writes
后面的宏),因此您需要使用标准的简写:
implicit def pageWrites[T: Writes]: Writes[Page[T]] = (
(__ \ 'data).write[List[T]] and
(__ \ 'previous).write[String] and
(__ \ 'next).write[String] and
(__ \ 'totalPageCount).write[Int]
)(unlift(Page.unapply[T]))
作为旁注,从模型代码中删除对序列化的担忧可能是个好主意 - 您可以删除隐式Writes
参数并使用此处给出的pageWrites
。