从Scala Future映射数据

从Scala Future映射数据,scala,playframework,playframework-2.0,future,Scala,Playframework,Playframework 2.0,Future,我正在实现一项任务,以调用Play Framework中的某个Rest端点,以下是我的服务中的代码: override def getAccessToken(loginData: LoginData): Future[Unit] = { logger.info("get access token from HAT") val accessTokenURL = // This is the URL to be called logger.info(accessTokenUR

我正在实现一项任务,以调用Play Framework中的某个Rest端点,以下是我的服务中的代码:

override def getAccessToken(loginData: LoginData): Future[Unit] = {
    logger.info("get access token from HAT")
    val accessTokenURL = // This is the URL to be called
    logger.info(accessTokenURL)
    ws
      .url(accessTokenURL)
      .withHttpHeaders(
        HeaderNames.ACCEPT -> ContentTypes.JSON,
        "username" -> loginData.username,
        "password" -> loginData.password
      )
      .withRequestTimeout(timeout)
      .get()
      .map {
        response => response.status match {
          case Status.OK =>
            val responseAsJson = response.json
            Future.successful((responseAsJson \ "accessToken").as[String])

          case _ =>
            val message = (response.json \"message").asOpt[String]
            throw new GeneralBadRequestException(message.get)
        }

      }
  }
val accessTokenURL
的响应类似于:

{
    "accessToken": "some token",
    "userId": "some user id"
}
然后在我的控制器中,我编写了如下函数,以从上述服务获取数据:

  private def handleAccessToken: LoginData => Future[Result] = { loginData =>

    requestHATService.getAccessToken(loginData).map (
      response => Ok(response)) recover {
      case e =>
        val errorJson: JsValue = Json.obj(
          "status" -> "ERROR",
          "error" -> Json.obj(
            "code" -> "ERROR",
            "message" -> e.getMessage
          )
        )
        BadRequest(errorJson)
    }
  }
目前我正在努力的是函数
handleAccessToken
中的
response=>Ok(response))
部分,我想将其包含到Ok结果中,以在控制器响应中返回,但我无法取出数据,尤其是
accessToken
,当我试图编译代码时,抛出如下错误:

无法将单元的实例写入HTTP响应。尝试定义一个 可写[单位]

编辑:感谢@Frederic的回答,我这里还有一个问题,我如何将响应字符串附加到某个JsValue并传递给Ok结果,比如

  val successJson: JsValue = Json.obj("status" -> "OK")
    requestHATService.getAccessToken(loginData).map (
      response => 
            // code to attach response to successJson here 
            Ok(successJson)) recover {
                 ......
            }

问题在于对以下各项的定义:
def getAccessToken(登录数据:登录数据):未来[单位]

应该是:
def getAccessToken(loginda:loginda):未来[String]


你需要更多的解释吗?

hi@Frederic谢谢你的回答,是的,这就是问题所在。在本例中,我有另一个问题,如何将响应字符串附加到某个JsValue并传递到Ok结果?像构建错误响应一样构建它有什么不对?