API return 可写

API return writeable

我正在尝试转换一些必须使用并发的端点。我有以下控制器方法:

原方法

def getHistory(id:String) = Action {
  val response = historyService.getPersonHistory(id)

  Ok(write(response)) as "application/json"
}

新方法

def getHistory(id:String) = Action.async {
    val response = scala.concurrent.Future {
        historyService.getPersonHistory(id)
    }

   response.map(i => Ok(i))

}

所以,当我们用一个简单的示例过程(不调用另一个方法,而只是计算一个 Int)尝试这个时,它似乎有效。在上面的新版本中,我不断收到错误消息:

"No implicits found for parameter writable: Writeable[historyResponse]

无法将 models.HistoryResponse 的实例写入 HTTP 响应。尝试定义一个 Writeable[models.HistoryResponse]"

我是 Scala 的新手,很难找到关于制作可写对象的信息。我需要什么才能 return 结果和以前一样?

谢谢

您需要在 HistoryResponse 的伴生对象中定义一个 implicit val tjs: Writes[HistoryResponse] 或更好的 implicit val format: Format[HistoryResponse] = Json.format[HistoryResponse],以便 play 可以自动将您的数据转换为 json。顺便说一下,地图函数中的 i 不是一个好名字,像“history”这样的名字会比“i”更好。