/ / Vrátenie zoznamu metaúdajov súborov z GridFS - bez Json deserializátora - scala, playframework-2.0, reactivemongo

Vrátenie zoznamu metaúdajov súborov z GridFS - bez Json deserializer - scala, playframework-2.0, reactivemongo

Toto je jednoduchá úloha s možno naivným prístupom. Získajte všetky súbory, ktoré zodpovedajú kritériám. So súbormi myslím metadáta súborov - nie binárne.

for {
files <- gfs.find(BSONDocument("metadata.ideaId" -> BSONObjectID(ideaId))).collect[Seq]()
} yield {

Ok(Json.toJson(files))
}

Mám rozsah pôsobnosti reaktivemongo.api.gridfs.Implicits._, ale chápem

No Json deserializer found for type Seq[reactivemongo.api.gridfs.ReadFile[reactivemongo.bson.BSONValue]]

odpovede:

4 pre odpoveď č. 1

Na túto úlohu používam veľmi jednoduchý ručne vyrobený serializátor:

import play.api.libs.json._
import play.api.libs.json.Json._
import reactivemongo.api.gridfs.ReadFile
import reactivemongo.bson.{BSONValue, BSONObjectID}

implicit val fileWrites = new Writes[ReadFile[BSONValue]] {
def writes(file: ReadFile[BSONValue]): JsValue = {
val id = file.id.asInstanceOf[BSONObjectID].stringify
obj(
"_id" -> id, // need it with underscore
"name" -> file.filename,
"url" -> routes.Files.serveFile(id).url, // app specific
"thumbnailUrl" -> routes.Files.serveFile(id).url, // app specific
"extension" -> file.filename.split(".").last,
"contentType" -> file.contentType,
"size" -> file.length,
"uploadDate" -> file.uploadDate,
"deleteUrl" -> "", // app specific
"deleteType" -> "DELETE"
)
}
}

takže to môžete použiť takto:

import helpers.Formats.fileWrites // your package here

def all = Action.async { request =
gfs.find(query).collect[List]() map {
case files: List[ReadFile[BSONValue]] => Ok(prettyPrint(obj("files" -> toJson(files))))
}

1 pre odpoveď č. 2

Pokúšate sa serializovať „súbory“, ktoré súSeq [reactivemongo.api.gridfs.ReadFile [reactivemongo.bson.BSONValue]] pre JSON, čo nie je možné z krabice. Musíte preň poskytnúť implicitný serializátor JSON (ako inštanciu play.api.libs.json.Writes [Seq [ReadFile [BSONValue]]]).

vidieť http://www.playframework.com/documentation/2.1.3/ScalaJson

Je tu časť „Prevod hodnoty Scala na JsValue“, ktorá popisuje podrobnosti.