Я начинаю играть с Play! Рамки для Scala и попытки создать API-интерфейс JSON REST с помощью MongoDB.Нет сериализатора Json для типа scala.concurrent.Future [Список [models.Product]]
Я использую play-mongodb-driver и пытаюсь построить метод findAll для моего API.
Так у меня есть эта модель:
//models/product.scala
case class Product(_id: String, name: String, price: Double)
object Product {
val collection = MongoClients.create().database("shopping").collection("products")
implicit val format = Json.format[Product]
def findAll = {
collection.find().collect[Product]
}
}
И этот контроллер:
//controllers/Product.scala
class Products @Inject()(mongo: MongoClient) extends Controller {
import models._
def listProducts = Action.async {
Json.toJson(Product.findAll)
}
}
и все, что я получил это сообщение об ошибке:
No Json serializer found for type scala.concurrent.Future[List[models.Product]]. Try to implement an implicit Writes or Format for this type.
Как я могу сделать это работает?
Я видел в некоторых примерах людей, реализующих implicti val format = Json.format[Model]
и думал, что это могло бы решить эту проблему, но это не так ...
Выглядит как Product.findAl l возвращает Future, поэтому попробуйте Product.findAll.map {allProducts => Json.toJson (allProducts)} –
Решенная часть проблемы! Но теперь он говорит, что перегруженный метод «применить» не может быть применен – gbrennon
hmm как насчет Ok (Json.toJson (allProducts)) –