因此,要实现迁移,您需要添加以下代码:
private val itemAddedMigration = new JsonMigration(2) {
override def transform(fromVersion: Int, json: JsObject): JsObject = {
if (fromVersion < 2) {
json + ("discount" -> JsNumber(0.0d))
} else {
json
}
}
}
override def migrations = Map[String, JsonMigration](
classOf[ItemAdded].getName -> itemAddedMigration
)
}
这意味着 ItemAdded 类型的所有新事件现在都将具有版本 2。所有以前的事件都将被视为版本 1。
它在类 PlayJsonSerializer 中定义
请看以下代码:
private def parseManifest(manifest: String) = {
val i = manifest.lastIndexOf('#')
val fromVersion = if (i == -1) 1 else manifest.substring(i + 1).toInt
val manifestClassName = if (i == -1) manifest else manifest.substring(0, i)
(fromVersion, manifestClassName)
}
另外,您可以在数据库中检查它。我使用 Cassandra,如果我打开我的数据库,我可以在 eventsbytag1 集合中找到描述版本的字段 ser_manifest。简单类在哪里 - 它是版本 1,您在其中指定了附加 '#2',它表示版本 2,依此类推。
如果您需要更多关于它如何工作的信息,您可以查看 PlayJsonSerializer 类中的方法 fromBinary。