我最近在我的scala案例类中添加了一个新字段,因为我想开始在MongoDB中跟踪该字段。
让我们说案例类是这样的:
case class MyItem (
var existingField: String,
var newlyAddedField: String
) {
}
我用它来序列化/反序列化json和bson到我的对象:
object MyItem {
import play.api.libs.json.Json
// generate reader and writer:
implicit var jsonFormats = Json.format[MyItem]
implicit var bsonFormats = Macros.handler[MyItem]
}
由于我的数据库中的所有现有数据都没有newlyAddedField
,因此我得到运行时异常
reactivemongo.bson.exceptions.DocumentKeyNotFound: The key 'newlyAddedField' could not be found in this document or array
有人可以帮忙吗?我已经阅读了关于编写自己的序列化/反序列化的内容,但我不知道如何做到这一点,因为我正在使用Play Framework,其语法和方法在其版本中都有所不同。我希望有一种更简单的方法,因为在NoSQL db中添加字段应该是常见的。顺便说一下,我正在使用play framework 2.5
提前致谢!
答案 0 :(得分:1)
AFAIU Macros.handler
是null
- 安全,即如果没有字段,则不会将值设置为null
。我认为在Scala中最简单和最干净的解决方法是将您的新字段声明为Option[String]
,这样每个人(包括宏代码生成器)都会看到该字段可能不存在。这似乎也是the doc suggests以及