2016-11-17 12 views
1

私はいくつかのケースクラスで混合された単純な形質を持っています。そのクラスのインスタンスをcirce経由でJSONに変換すると、JSON文字列には含まれていないtraitのデフォルト値を持つフィールドが認識されました。Circeの形質フィールドはjsonに含まれていません

私はそれをillustarateする

例を符号化するためio.circe.generic.auto._を使用しています:{"id":"testId"}

をのでstrが、私は

期待タイムスタンプとバージョンの値が含まれていません。与え

trait Base { 
    var timestamp: Timestamp = new Timestamp(System.currentTimeMillis()) 
    var version = 0 
    } 

    case class CC(id: String) extends Base 

    val cc = CC("testId") 
    val str = cc.asJson.noSpaces 

私はそれが大文字小文字クラスのためのエンコーダを使用し、ただ特性をスキップすると仮定します。私もこれらのフィールドを含めるために何をする必要がありますか?

はキルケ(0.3.0および0.6.0)の異なるバージョンでこの試み

また後でJSON文字列からフィールドが(別の値を持つことができる)、または私はより良い左べきこれは抽象フィールドことをデコードすることができますケースクラスでデフォルトの引数を使用しますか?

答えて

1

これらのフィールドをCCケースクラスに直接追加するか、独自のエンコーダを明示的に定義する必要があります。

trait Base { 
    def timestamp: Timestamp 
    def version: Int 
    } 

    case class CC(id: String, timestamp: Timestamp, version: Int) 
    extends Base 

    object CC { 
    def apply(id: String) = new CC(
     id, new Timestamp(System.currentTimeMillis()), 0 
    ) 
    } 

    val cc = CC("testId") 
    val str = cc.asJson.noSpaces 

私はこのような何かをしたいです