我有一个案例类和这样的特征。
trait A {
val _id: Option[A] = None
val d: Option[List[D]] = None
val id: Option[String] = None
}
object A {
def apply(className: String): Element = Class.forName(className: String).asInstanceOf[A]
def unapply(element: A): Option[String] = Option(this.getClass.getName)
}
case class B extends A (
value1: String, value2: A, sub: Option[TypeY] = None
)
object B {
import play.api.libs.functional.syntax._
implicit val AFormatter: Format[A] = Json.format[A]
implicit val BFormatter: Format[B] = Json.format[B]
implicit val Breads:Reads[B] = Json.reads[B]
implicit val BWrites = Json.writes[B]
}
在插入对应于案例类B的数据时,value2被保存为“$ A”:“abc.xyz.data”,其中“A”是特征名称,“abc.xyz.data”是包裹名字。这是因为我的申请和取消申请方法?怎么解决这个问题?
编辑:数据库保存代码
我正在使用ReactiveMongo库将数据保存到数据库。
def collB : JSONCollection = db.collection[JSONCollection]("B")
def indbNewB(b: B) = {
collB.insert(B)
}
答案 0 :(得分:0)
我认为你没有正确地序列化为JSON / string案例类A
。
如果你可以发布更多细节(例如实际存储数据到DB的代码),我会更新我的答案。