首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有Play-json职责的ReactiveMongo部门

具有Play-json职责的ReactiveMongo部门
EN

Stack Overflow用户
提问于 2020-11-16 22:24:33
回答 1查看 58关注 0票数 0

我使用play-json将传入的json序列化为case类,例如来自sqs源代码或api调用的类。

这是一个非常简单的类JsonSerialization,我在需要的地方导入它:

代码语言:javascript
复制
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中导入:

代码语言:javascript
复制
import reactivemongo.play.json.compat.json2bson.{toDocumentReader, toDocumentWriter}
import serializers.JsonSerialization._

find和insert可以完美地工作,

代码语言:javascript
复制
  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]
  }

你能告诉我刀的哪个部分负责什么吗?我有点困惑

抱歉,如果这是一个初学者的问题,但它将有助于获得简短的解释

EN

回答 1

Stack Overflow用户

发布于 2021-01-27 17:43:36

我使用的是带有ReactiveMongo 1.0的Play Framework2.8。我通常做的是,

1.在集合上进行查找。

这将返回一些BSONDocuments,您需要提供BSON读取器和写入器来将BSONDocuments与case类相互转换。您可以查看一些教程和示例here。然后,您可以使用以下代码执行一些通用查询:

代码语言:javascript
复制
    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 r

JSON 2.以返回查询结果

检索到查询结果后,可以使用Json.toJson()在JSON中返回它们,这将隐式调用case类的JSON readers/writers

代码语言:javascript
复制
Person.find().map {
    item => {
        Ok(Json.toJson(item))
    }
}

我没有使用bson2json,我猜在幕后将case类转换为JSON会有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64859785

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档