当我在 Playframework 中进行隐式 JSON 调用时,Tuple-2 起作用:
def toJson(itemTuple: List[((Item, ItemOption), List[Picture])]) : JsObject = { ... }
我定义了一个隐式 Writes 方法,一切都很好。在这种情况下,我可以在“外部”JSON 块中传递这样的列表:
"items" -> Json.toJson(itemTupleList)
并且在每个元素上执行隐式方法“toJson”。但是,当我将它扩展到 Tuple-3 时,它失败了:
def toJson(itemTuple: List[((Item, ItemOption, ItemAttribute), List[Picture])]) : JsObject = { ... }
这产生:
sbt.PlayExceptions$CompilationException: Compilation error[No Json deserializer found for type List[(models.butik.Item, models.butik.ItemOption, models.butik.ItemAttribute)]. Try to implement an implicit Writes or Format for this type.]
我以为我做到了:
implicit val iW = new Writes[((Item, ItemOption, ItemAttribute), List[Picture])] { ... }
这是什么原因?是否有另一种方法可以在没有隐式方法的情况下实现相同的效果(我对 Scala 有点陌生)。
(顺便说一句:将 Item 数据拆分为三个容器的原因是由于 Slick 依赖的 Scala 的 22 个元组元素。)