所以,我有一個case類以及JSON和BSONDocument格式的讀者和作者。使用case類進行json驗證和MongoDB persistense(Reactivemongo),那麼id呢?
問題是,當插入到MongoDB時,我想能夠指定BSONObjectID,所以我可以在創建時返回它。但是,如果我在case類中添加id: BSONObjectID
,我無法找到讓JSON驗證/轉換正常工作的方法。
這是我的代碼:
case class Mini(username: String, email: String, quizAnswer1: List[String])
implicit object MiniWriter extends BSONDocumentWriter[Mini] {
def write(mini: Mini): BSONDocument = BSONDocument(
"username" -> mini.username,
"email" -> mini.email,
"quizAnswer1" -> mini.quizAnswer1
)
}
implicit object MiniReader extends BSONDocumentReader[Mini] {
def read(doc: BSONDocument): Mini = Mini(
doc.getAs[String]("username").get,
doc.getAs[String]("email").get,
doc.getAs[List[String]]("quizAnswer1").toList.flatten
)
}
implicit val miniReads: Reads[Mini] = (
(JsPath \ "username").read[String] and
(JsPath \ "email").read[String] and
(JsPath \ "quizAnswer1").read[List[String]]
)(Mini.apply _)
implicit val miniWrites: Writes[Mini] = (
(JsPath \ "username").write[String] and
(JsPath \ "email").write[String] and
(JsPath \ "quizAnswer1").write[List[String]]
)(unlift(Mini.unapply))
我真的希望避免與相同型號的重複模型表示工作。有任何想法嗎?
謝謝,該答案使我朝着正確的方向發展。我也將Option放入最終解決方案中,用於其他非強制性領域。 – Wrench