私は、いくつかのケースクラスに混在する単純な特性を持っています。そのクラスのインスタンスを circe 経由で JSON に変換するときに、特性のデフォルト値を持つフィールドが JSON 文字列に含まれていないことに気付きました。
io.circe.generic.auto._
エンコードに使用しています
それを説明する例:
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
与える:{"id":"testId"}
したがってstr
、私が期待するタイムスタンプとバージョンの値が含まれていません
ケースクラスにエンコーダーを使用し、特性をスキップするだけだと思います。それらのフィールドも含めるにはどうすればよいですか?
Circeの異なるバージョン(0.3.0および0.6.0)でこれを試しました
また、後で JSON 文字列からそのフィールド (別の値を持つことができる) をデコードできますか、またはこのフィールドを抽象のままにして、ケース クラスでデフォルトの引数を使用する必要がありますか?