Print the JSON response from GET request in Finagle

543 Views Asked by At

I am trying to do a GET request and print the JSON response that I get back. The JSON response should look like this.

{
    "request_status": "Success",
    "workflow_step": "End"
}

Here's my code:

handle(GetStatus) { args: GetStatus.Args =>
    val client: Service[http.Request, http.Response] =
      Http.client.withTlsWithoutValidation.newService("idm-preprod-fe1.twitter.biz:80")
    val request = http.Request(
      http.Method.Get,
      "/plugin/rest/groupmanagement/getStatus/Create Group Request for mygroup (1638800484991)")
    request.host = "idm-preprod-fe1.twitter.biz"
    Future.value(GetStatusResponse(Option(client(request).toString)))
  }

Now when my client sends the request to the server, I want to print the JSON but the format that I am getting is. Can someone please guide me as how to achieve this.

Promise@1589131174(state=Transforming(WaitQueue(size=1),Promise@1823443423(state=Transforming(WaitQueue(size=1),Promise@859399396(state=Transforming(WaitQueue(size=4),Promise@1441370332(state=Transforming(WaitQueue(size=2),Promise@1459834(state=Transforming(WaitQueue(size=2),Promise@156947070(state=Transforming(WaitQueue(size=1),Promise@1739595981(state=Transforming(WaitQueue(size=1),Promise@273198152(state=Transforming(WaitQueue(size=1),Promise@478329071(state=Transforming(WaitQueue(size=2),Promise@1175786031(state=Transforming(WaitQueue(size=1),Promise@1749285277(state=Transforming(WaitQueue(size=1),Promise@1733124454(state=Transforming(WaitQueue(size=1),Promise@1257379837(state=Transforming(WaitQueue(size=1),Promise@1192050340(state=Transforming(WaitQueue(size=1),Promise@1114225943(state=Transforming(WaitQueue(size=1),Promise@1417620904(state=Transforming(WaitQueue(size=1),Promise@1638767611(state=Interruptible(WaitQueue(size=2),<function1>))))))))))))))))))))))))))))))))))
1

There are 1 best solutions below

0
On

client(request) is giving you a Future[http.Response]: it represents a response that will be available some time in the future.

You cannot use toString() on it directly because it's a Future and also because even if it was not a Future it would be a Response, which is a whole HTTP response, not only the body.

I'd recommend reading more about how Future works and how to use it.

In your case, you should do something like following (pseudo code as I'm not familiar with Twitter's Future):

client(request).map { httpResponse =>
  val responseBody = httpResponse.body
  GetStatusResponse(Option(responseBody))
}