我正在使用 Salat 库将案例类序列化为 mongoDb 对象。我的 Item.scala 文件如下所示:
case class Item(_id: String = (new ObjectId).toString, itemId: Int, var name: String, var active: Boolean) extends WithId {
override def id: ObjectId = new ObjectId(_id)
}
object Item extends MongoDb[Item] with MongoDao[Item] {
override def collectionName: String = "items"
}
object ItemJsonProtocol extends DefaultJsonProtocol {
implicit val itemFormat = jsonFormat4(Item.apply)
}
现在,我使用它通过 Spray HTTP 将 Item 实体发布为 Json。我想按如下方式调用它:
curl.exe -H "Content-Type: application/json" -X PUT -d "{\"itemId\":
1, \"active\":true, \"name\" : \"test\"}" http://localhost:8080/items/
如果我不提供,希望它会提供生成的 id。
但是,在调用 curl 命令后,我收到一个错误:
请求内容格式错误:对象缺少必需的成员“_id”
有什么方法可以将 _id 字段标记为可选而不使 Option 不在其中(该字段将始终设置)并定义自定义 JsonFormat 从而自己(反)序列化对象?
我读过这篇文章:https ://stackoverflow.com/a/10820293/1042869 ,但我想知道是否还有其他方法可以做到这一点,因为我有很多 _id 字段的情况。也有一条评论说“您可以在案例类定义中为该字段指定默认值,因此如果该字段不在 json 中,它将为其分配默认值。”,但正如您在此处看到的它似乎不起作用。
最好的,马辛