我使用play-json将传入的json序列化为case类,例如来自sqs源代码或api调用的类。
这是一个非常简单的类JsonSerialization,我在需要的地方导入它:
object JsonSerialization {
implicit val StatusFormat: Format[Status] = EnumFormats.formats(Status)
implicit val PersonFormat: OFormat[Person] = Json.format[Person]
}但现在我想知道,根据我在Dao中的理解,需要一些东西来将case类序列化为BSON,因为我的Dao获取case类,并且当我从要反序列化的对象中提取时,需要将其反序列化为case类。我只在Dao中导入:
import reactivemongo.play.json.compat.json2bson.{toDocumentReader, toDocumentWriter}
import serializers.JsonSerialization._find和insert可以完美地工作,
def insert(person: Person): Future[Person] = {
val writeRes: Future[WriteResult] = collection.insert.one(person)
writeRes.onComplete {
case Failure(e) => e.printStackTrace()
case Success(writeResult) =>
logger.info(s"successfully inserted person")
}
writeRes map { _ => person }
}
def find(name: String): Future[Person] = {
collection.find(BSONDocument(
"name" -> name
)).requireOne[Person]
}你能告诉我刀的哪个部分负责什么吗?我有点困惑
抱歉,如果这是一个初学者的问题,但它将有助于获得简短的解释
发布于 2021-01-27 17:43:36
我使用的是带有ReactiveMongo 1.0的Play Framework2.8。我通常做的是,
1.在集合上进行查找。
这将返回一些BSONDocuments,您需要提供BSON读取器和写入器来将BSONDocuments与case类相互转换。您可以查看一些教程和示例here。然后,您可以使用以下代码执行一些通用查询:
for {
c <- database.map(_.collection(collectionName))
r <- c.find(selector.getOrElse(BSONDocument()), projection)
.sort(sorter.getOrElse(BSONDocument()))
.cursor[T]().collect[List](Int.MaxValue, Cursor.FailOnError[List[T]]())
} yield rJSON 2.以返回查询结果
检索到查询结果后,可以使用Json.toJson()在JSON中返回它们,这将隐式调用case类的JSON readers/writers。
Person.find().map {
item => {
Ok(Json.toJson(item))
}
}我没有使用bson2json,我猜在幕后将case类转换为JSON会有所帮助。
https://stackoverflow.com/questions/64859785
复制相似问题