2017-02-20 40 views
0

我有一個案例類和像這樣的特質。

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中的數據時,值2被保存爲「$ A」:「abc.xyz.data」,其中「A」是該性狀的名稱和「abc.xyz。數據「是包名稱。這是因爲我的申請和不申請的方法?如何解決這個問題?

編輯:DB保存代碼

我使用ReactiveMongo庫將數據保存到數據庫中。

def collB : JSONCollection = db.collection[JSONCollection]("B") 

def indbNewB(b: B) = { 

    collB.insert(B) 

} 
+0

你在使用哪個庫?你已經嘗試了什麼? – cchantep

+0

我認爲問題在於你試圖序列化一個特質。不管value2是什麼值,串行器必須使用的所有信息都是類型'A'。 – pedrofurla

+0

@pedrofurla:如果我不添加json序列化/反序列化,那麼我會得到「特質A不適用,未應用實現」錯誤。 – sowmiyaksr

回答

0

我認爲你沒有正確序列化到JSON /字符串案例類A

如果您可以發佈更多詳細信息(例如實際存儲數據到數據庫的代碼),我會更新我的答案。

+0

增加了db代碼。請檢查 – sowmiyaksr

相關問題