Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala API返回可写_Scala_Concurrency_Playframework - Fatal编程技术网

Scala API返回可写

Scala API返回可写,scala,concurrency,playframework,Scala,Concurrency,Playframework,我正在尝试转换一些端点,我必须使用并发。我对控制器有以下方法: 原始方法 def getHistory(id:String) = Action { val response = historyService.getPersonHistory(id) Ok(write(response)) as "application/json" } 新方法 def getHistory(id:String) = Action.async { val response =

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

原始方法

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响应。尝试定义可写的[models.HistoryResponse]

我是Scala新手,很难找到制作可写文件的信息。我需要什么才能像以前一样返回结果


谢谢

您需要在HistoryResponse的伴生对象中定义隐式val tjs:Writes[HistoryResponse]或更好的隐式val格式:format[HistoryResponse]=Json.format[HistoryResponse],以便play可以自动将数据转换为Json。顺便说一句,在map函数中,i不是一个好名字,类似history的东西会比i更好。

您需要在HistoryResponse的伴生对象中定义隐式val tjs:Writes[HistoryResponse]或更好的隐式val format:format[HistoryResponse]=Json.format[HistoryResponse],这样,play可以自动将数据转换为json。顺便说一句,在map函数中,i不是一个好名字,像history之类的东西会比i更好。

我不确定我的模型本身需要更改的伴生对象是什么意思?@Limey你可以找到更多,你也可以使用其他注入可写对象的方法,但是使用companion对象是最佳实践。将结果包装成write-Okwriteresult作为application/json解决了这个问题。谢谢我不确定我的模型本身需要更改的伴生对象是什么意思?@Limey您可以找到更多信息,您也可以使用其他方法注入可写对象,但使用伴生对象是最佳做法。将结果包装为write Okwriteresult as application/json解决了问题。谢谢historyService.getPersonHistory的签名是什么?声明为application/json的Okwriteresponse中的write方法在哪里?尝试查找此区域中的隐含信息。historyService.getPersonHistory的签名是什么?声明为application/json的Okwriteresponse中的write方法在哪里?试着在这个区域寻找隐含的信息。