Playframework 2.0 play2框架mongodb:[NoTouchElementException:None.get]
我很难用mongodb在play 2.1.5上创建我的BSON阅读器/编剧 下面是app/model/Boat.scala中的代码摘录:Playframework 2.0 play2框架mongodb:[NoTouchElementException:None.get],playframework-2.0,mongodb-scala,Playframework 2.0,Mongodb Scala,我很难用mongodb在play 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, (...) ) } 然
implicit object BoatBSONReader extends BSONDocumentReader[Boat] {
def read(doc: BSONDocument): Boat =
Boat(
(...)
doc.getAs[Accomodation]("accomodation").get,
(...)
)
}
然后在app/model/acomodation.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对象中返回en空值
这会在编译时导致此错误:
[NoSuchElementException: None.get]
doc.getAs[Accomodation]("accomodation").get,
也许有人会给我指出正确的方向
塔克斯 这不是编译时错误,而是一个运行时错误,这意味着您试图反序列化为船的文档无法被您的读者读取 这可能是因为文档中没有字段“accomodation”,或者它的值无法通过accomodation reader反序列化为accomodation实例。这导致
getAs[A](名称)
返回None
调用.get
onNone
会给您带来NoTouchElementException
一般来说,调用被认为是不好的做法。相反,您应该始终处理这两种可能的选择。您可以在此处阅读有关选项工作原理的更多信息,例如:
您可以使用
BSONDocument.getAsTry[A](name)
获取更多错误信息,因为这会返回Success
或Fail
,其中Fail
可能保留有关错误的详细信息。谢谢Johan给出的明确答案。我会继续努力,如果我成功了会发回的。