Tuple-2 は、Playframework で暗黙的な JSON 呼び出しを行うと機能します。
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 データを 3 つのコンテナーに分割する理由は、Slick が依存している Scala の 22 のタプル要素によるものです。)