es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Imprima la respuesta JSON del pedido GET en Finagle.

Estoy tratando de hacer una solicitud GET y imprimir la respuesta JSON que recibo. La respuesta JSON debería verse así.

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

Aquí está mi código:

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

Ahora, cuando mi cliente envía la solicitud al servidor, quiero imprimir el JSON, pero el formato que estoy obteniendo es. ¿Alguien puede por favor ayudarme a lograr esto?

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

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para imprimir la respuesta JSON en el formato especificado, debes extraer el cuerpo de la respuesta HTTP y analizarlo como JSON. Aquí hay una versión actualizada del código que imprime la respuesta JSON:

    import com.twitter.finagle.{Http, Service}
    import com.twitter.finagle.http
    import com.twitter.util.Future
    
    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"
    
      client(request).flatMap { response =>
        val responseBody = response.contentString.trim
        val json =
          s"""
            |{
            |  "request_status": "Success",
            |  "workflow_step": "$responseBody"
            |}
          """.stripMargin
    
        Future.value(GetStatusResponse(Some(json)))
      }
    }
    

    En este código, usamos el método flatMap para encadenar una nueva operación al Future devuelto por client(request). El parámetro response en el cierre contiene la respuesta HTTP, de la cual obtenemos el cuerpo usando la propiedad contentString. Luego construimos una nueva cadena JSON utilizando el cuerpo de la respuesta y el formato especificado. Finalmente, devolvemos un GetStatusResponse que contiene la cadena JSON envuelta en una Option.

Comments are closed.