Scala / Slick - 用于映射光滑表的案例类的JSON编写器

时间:2017-04-22 06:54:12

标签: scala playframework slick

我有一个case类,我在扩展Table类时使用它。

case class Foo (
  ..
)

class FooTable(tag: Tag) extends Table[Foo](tag, "foo") {
  ..
  override def * = (...) <> (Foo.tupled, Foo.unapply)
}

所有作品都找到了。现在我想为这个案例类定义一个JSON编写器。

object Foo {
  implicit val fooWrites: Writes[Foo] = (
    ...
  )(unlift(Foo.unapply))
}

上面的代码会导致错误与表定义中的星形投影冲突 - 类似于&#34;值tupled不是对象模型的成员.Foo&#34;。所以我最终创建了一个新的案例类FooDuplicate并最终复制了Foo的所有成员并将其用于JSON编码/解码。据我所知,案例类没有继承。

有没有办法避免在上述场景中重复案例类的成员?我相信在其他案例中包含一个案例类也无济于事,因为我无法为包含的案例类定义JSON编写器,原因相同。

1 个答案:

答案 0 :(得分:1)

如果我正确理解了这个问题,我遇到了类似的问题。我修复了:

def * = (...) <>((Foo.apply _).tupled, Foo.unapply)

它不漂亮,但它有效。当时我用Google搜索了解问题,但我无法记住理由。但是它与伴侣对象及其自动创建的东西有关。