2017-04-22 51 views
0

我有一个case类,我使用它来扩展Table类。Scala/Slick - 用于映射光滑表格的case类的JSON编写器

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)) 
} 

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

有没有办法避免在上述情况下重复案例类的成员?我相信包含一个案例类内其他不会帮助,因为我无法为包含的案例类定义一个JSON作家出于同样的原因。

回答

1

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

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

它不漂亮,但它的工作原理。当时我用Google来了解这个问题,但我不记得理由。但与伴侣对象和它自动创建的事物有关。

+0

正是我需要..非常感谢 – srvy