在 Finagle 中打印来自 GET 请求的 JSON 响应

Posted

技术标签:

【中文标题】在 Finagle 中打印来自 GET 请求的 JSON 响应【英文标题】:Print the JSON response from GET request in Finagle 【发布时间】:2022-01-13 17:23:21 【问题描述】:

我正在尝试执行 GET 请求并打印我返回的 JSON 响应。 JSON 响应应如下所示。


    "request_status": "Success",
    "workflow_step": "End"

这是我的代码:

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)))
  

现在,当我的客户端向服务器发送请求时,我想打印 JSON,但我得到的格式是。有人可以指导我如何实现这一目标。

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】:

client(request) 正在给你一个Future[http.Response]:它表示将来某个时间可用的响应。

您不能直接在其上使用toString(),因为它是Future,还因为即使它不是Future,它也会是Response,这是一个完整的HTTP 响应,而不仅仅是正文。

我建议您阅读更多关于 Future 的工作原理以及如何使用它的信息。

在您的情况下,您应该执行以下操作(伪代码,因为我不熟悉 Twitter 的 Future):

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

【讨论】:

以上是关于在 Finagle 中打印来自 GET 请求的 JSON 响应的主要内容,如果未能解决你的问题,请参考以下文章

来自 api 请求的对象在 ForEach 中打印,但不在 List 中

如何在一个 GET 请求中解析来自 Coinbase API 的所有股票代码

一个函数中来自 2 个 API 的 GET 请求(JQuery)

IE 11问题-自动缓存来自GET请求的响应-Reactjs

为啥 NodeJS 中来自 Angular 的 GET 请求有时为空,尽管有数据

为啥请求中没有发送来自 $http GET 的数据? [复制]