[英]play2 framework mongodb : [NoSuchElementException: None.get]
我在嘗試使用mongodb在游戲2.1.5上創建BSON讀取器/寫入器時遇到困難。
這是app / model / Boat.scala中的代碼摘錄:
implicit object BoatBSONReader extends BSONDocumentReader[Boat] {
def read(doc: BSONDocument): Boat =
Boat(
(...)
doc.getAs[Accomodation]("accomodation").get,
(...)
)
}
然后在app / model / Accomodation.scala中,我有:
case class Accomodation(number_cabins: Int, cabin_configuration: Option[String], bed_configuration: Option[String], number_guest: Int)
(...)
implicit object AccomodationBSONReader extends BSONDocumentReader[Accomodation] {
def read(doc: BSONDocument): Accomodation =
Accomodation(
doc.getAs[Int]("number_cabins").get,
doc.getAs[String]("cabin_configuration"),
doc.getAs[String]("bed_configuration"),
doc.getAs[Int]("number_guest").get)
}
}
我在某些字段上使用了“ Option [String]”,因為這些鍵可能會從mongodb記錄中丟失。 在這種情況下,我想在我的Scala對象中返回一個空值。
這在編譯時導致此錯誤:
[NoSuchElementException: None.get]
doc.getAs[Accomodation]("accomodation").get,
也許有人會指引我正確的方向。
謝謝!
這不是編譯時錯誤,而是運行時錯誤,這意味着您嘗試將作為Boat進行反序列化的文檔對讀者不可讀。
這可能是因為文檔中沒有字段“ accomodation”,或者它的值無法通過您的Accomodation閱讀器反序列化為Accomodation實例。 這導致getAs[A](name)
返回None
。
調用.get
on None
通常會給您帶來NoSuchElementException
,因此,永遠不要在選項上調用.get,這是一種不好的做法,相反,您應該始終處理這兩種可能的選擇。 您可以在此處閱讀有關Option工作原理的更多信息: http : //danielwestheide.com/blog/2012/12/19/the-neophytes-guide-to-scala-part-5-the-option-type.html
通過改用BSONDocument.getAsTry[A](name)
,您可能會獲得更多關於錯誤原因的信息,因為這將返回Success
或Fail
,而Fail
可能會保留有關錯誤的詳細信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.