【发布时间】:2017-05-28 03:02:56
【问题描述】:
我从 rest api 创建了一个简单的列表获取器:
def list: Future[Iterable[ProductResource]] = {
ProductService.listAllProducts.map { postDataList =>
postDataList.map(postData => createProductResource(postData))
}
}
它使用这个 writer 将产品对象转换为 json:
object ProductResource {
implicit val implicitWrites = new Writes[Product] {
def writes(product: Product): JsValue = {
Json.obj(
"id" -> product.id,
"name" -> product.name,
"description" -> product.description,
"price" -> product.price,
"amount" -> product.amount
)
}
}
}
但是当我编译项目时,我得到:play.sbt.PlayExceptions$CompilationException: Compilation error[Cannot use a method returning scala.concurrent.Future[Iterable[controllers.ProductController.ProductResource]] as a Handler for requests],我不明白如何修复它。
我看了这个教程https://developer.lightbend.com/guides/play-rest-api/part-1/index.html
还有类似的列表功能。
编辑:
我更新了这个函数并添加了一个动作:
def list: Action[AnyContent] = {
Action.async { implicit request =>
find.map { products =>
Ok(Json.toJson(products))
}
}
}
def find: Future[Iterable[ProductResource]] = {
ProductService.listAllProducts.map { postDataList =>
postDataList.map(postData => createProductResource(postData))
}
}
现在我得到 No Json serializer found for type Iterable[controllers.ProductController.ProductResource]. Try to implement an implicit Writes or Format for this type.,但我创建了一个 writes。
【问题讨论】:
标签: scala playframework