С Play -ReactiveMongo
Итак, у вас есть несколько вариантов. Похоже, что вы используете платформу Play, а затем я предполагаю Play-ReactiveMongo Plugin. Если это проверка дела, это question Его немного отличается, но я думаю, что вы можете повторно использовать идеи из представленного ответа.
import play.modules.reactivemongo.json.BSONFormats._
, а затем в вашем случае успеха
case Success(result) => {
result.map { data =>
Json.toJson(data)
}
Есть и другие варианты, чтобы преобразовать BSONDocuments в формате JSON, но играть-ReactiveMongo делает вещи проще.
Без плагина Play-ReactiveMongo вам нужно будет сообщить ReactiveMongo, как писать и читать ваши данные. Для этого ReactiveMongo использует BSONDocumentReaders & BSONDocumentWriters. Они обеспечивают Macro генерировать эти для большинства классов this link has more info
import reactivemongo.bson._
//lets say your domain/case class is called Person
implicit val personHandler:BSONHandler[BSONDocument,Person] = Macros.handler[Person]
BSONHandler собирает как BSONReader и BSONWriter черту, и вы можете поместить это неявным в Лице объекта-компаньон.
Метод ReactiveMongos one
является общим для типа объекта, который он ищет, и принимает неявный читатель для вашего объекта.
def one[T](readPreference: ReadPreference)(implicit reader: Reader[T], ec: ExecutionContext): Future[Option[T]]
Таким образом, в этом примере он будет использовать Ридер сгенерированный из выше Macro, чтобы вернуть Future[Option[Person]]
вместо Future[Option[BSONDocument]]
.Затем вы можете использовать Play JSON, чтобы написать свой домен в формате JSON
Для полного раскрытия вы можете написать свои собственные писатель клиентов, а не использовать Macro и они в конечном итоге похож на написание Play JSON писателей и читателей
'BSONDocument.pretty (bsonDoc)' – cchantep