scala - 将 JSON POST 到 Akka Http 中的端点

标签 scala akka-http

我正在尝试创建 HttpRequest 并尝试将 json 提交到 endPoint ,我的其余服务是使用 akka-http 编写的

  case class JobInfo(jobName: String,
                   appId: Option[String] = None,
                   status: Option[String] = None,
                   modify_date: Option[Long] = None)

object Test extends App{

import HttpMethods._
  val fieldList = List(
    ("jobName",Json.fromString("TestJobA")),
    ("appId",Json.fromString("1234")),
    ("status",Json.fromString("Running")),
    ("modify_date",Json.fromLong(DateTime.now.getMillis))
  )
  val json = Json.fromFields(fieldList)

  val endPoint = Uri.from(scheme = "http",
    host = "0.0.0.0",
    port = 7000,
    path = s"/updateJobDetails/").toString()

  val requestEntity = HttpEntity(MediaTypes.`application/json`, json.toString)
//  val postRequest1 = HttpRequest.POST("/receive").withEntity(requestEntity)
  HttpRequest(POST,"http://0.0.0.0:7000/updateJobDetails",entity = requestEntity)

} 

但这似乎不起作用, 之前我用spray做了同样的事情

  val pipe: HttpRequest => Future[HttpResponse] = sendReceive
          val json =
            s"""{
               |  "jobName" : "jobA",
               |  "appId" :"${jobInfo.appId.getOrElse("Not Set")}",
               |  "status" :"${jobInfo.status.getOrElse("Not Set")}",
               |  "modify_date" :${DateTime.now.getMillis}
               |}""".stripMargin.parseJson.asJsObject()

          //Rest EndPoint for JobDetails updation.
          val endPoint = Uri.from(scheme = "http",
            host ="0.0.0.0",
            port = 7000,
            path = s"/updateJobDetails").toString()

          val response = pipe(Put(endPoint, json))

谁能帮我纠正我遗漏的内容

最佳答案

当您说“不工作”时,请同时提供您收到的错误消息。

无论如何,从您上面发布的代码来看。你正在 build 一个 future ,但你并没有等待它完成。

下面的代码展示了如何构建 Future 并等待它完成。

object Client {
  def main(args: Array[String]): Unit = {
    implicit val system = ActorSystem()
    implicit val materializer = ActorMaterializer()
    // needed for the future flatMap/onComplete in the end
    implicit val executionContext = system.dispatcher

    val responseFuture: Future[HttpResponse] = Http().singleRequest(HttpRequest(uri = "http://akka.io"))

    responseFuture
      .onComplete {
        case Success(res) => println(res)
        case Failure(_)   => sys.error("something wrong")
      }
    Await.result(responseFuture, Duration.Inf)
  }
}

关于scala - 将 JSON POST 到 Akka Http 中的端点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49196175/

相关文章:

sbt 控制台中的 Scala 2.10 和 Continuations (akka-dataflow)

scala - FOR 循环多个生成器

scala - 如何使用 akka http 将 html、css 和 js 合二为一?

scala - 在同一规范文件中测试 akka-http 和 akka actor 时,如何解决冲突的 actor 系统?

scala - 从 Akka HttpResponse 检索 Cookie

java - 运行 jacocoReport

scala - 为什么我不能在 Scala 中写 println "Hello world"?

scala - 如何过滤列表中谓词高于整个其他列表的元素

scala - Akka 流保持空闲状态而不是抛出异常

scala - 如何在 Scala 或 Java 中模拟或 stub AWS SDK S3 存储桶调用?