来处理
WS.post
返回一个Future[Response]
,但我想要一个Future[Data]
,所以我使用Future.collect
来达到这个目的。
private def getDataFuture(data: String): Future[JsValue] =
initAuthenticatedRequest().post(body).collect {
case response => response.json(0)
}.recoverWith {
case NonFatal(_) => getDataFuture(data)
}
但是,有时response.json(0)
返回一个错误的值,因为我收到一个空的 json。我预计这会导致未来失败并做recoverWith
,但这并没有发生。
我是否需要在收集案例中进行分支?我怎样才能更优雅地处理这个问题?我以为未来会为此做出规定。
你必须使用
initAuthenticatedRequest().post(body).map(_.json.as[JsArray])
json.as[JsArray]
将 JSON 强制转换为JsArray
或抛出异常,这可以通过recoverWith