2017-02-20 4 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あります。 data "はパッケージ名です。これは私の適用と適用解除の方法のためですか?これを解決するには?

編集:DBセーブコード

私はDBにデータを保存するためにReactiveMongoライブラリを使用しています。

+0

あなたはどちらのlibを使用していますか?あなたは何を試しましたか? – cchantep

+0

私は問題は、あなたが特性を直列化しようとしていると思います。そして、 'value2'の値が何であるかは関係ありません。シリアライザが扱うべきすべての情報は、それが' A'型であるということです。 – pedrofurla

+0

@pedrofurla:jsonのシリアライゼーション/デシリアライゼーションを追加しないと、「適用されていない、実装されていない」というエラーが表示されます。 – sowmiyaksr

答えて

0

ケースクラスAをJSON/stringに正しくシリアル化していないと思います。

実際にDBにデータを保存するコードなど、詳細を投稿できる場合は、私の回答を更新します。

+0

dbコードが追加されました。チェックしてください – sowmiyaksr

関連する問題