2016-11-17 49 views
1

我有一个简单的特征,它在某些病例类中混合。当通过circe将该类的实例转换为JSON时,我意识到具有trait中默认值的字段不包含在JSON字符串中。未包含在json中的Circe特征字段

我使用io.circe.generic.auto._编码

实例来illustarate它:

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不包含我期望

时间戳和版本值

我假设它使用案例类的编码器,只是跳过一个特点。我需要做些什么来包括这些字段呢?

不同版本瑟茜(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