使用Spray IO Client发送JSON请求

时间:2015-08-27 11:29:58

标签: json scala io spray

现在我在Scala中构建一个小型API,它使用Spray.IO框架来处理请求。响应。

当调用我的/更新URL时,我想调用另一个API来处理实际更新,以及此请求我想添加一些JSON数据。

为此,我使用以下代码:

  val message: String = "{\"elements\":[{\"id\":\"2\",\"attributes\":[{\"name\":\"value\",\"type\":\"float\",\"value\":\"46\"}]}],\"updateAction\":\"UPDATE\"}"
  val url: String = "http://[domain]/update"

  val pipeline: HttpRequest => Future[HttpResponse] = sendReceive
  val response: Future[HttpResponse] = pipeline(
    Post(url, message)
      ~> addHeaders(List(
        RawHeader("Content-Type", "application/json")
    ))
  )

  response onComplete { completedResponse =>
    println("Response: "+completedResponse.get.message.entity.asString)
  }

但是当我检查日志时,我可以看到Content-Type实际上设置为text/plain; charset=UTF-8,这是因为Spray IO Client实际上确定了Content-Type本身。

所以我的问题是;我怎样才能让Spray IO真正将我的消息识别为Content-Type:application/json ..

有什么想法?非常感谢:)

1 个答案:

答案 0 :(得分:3)

您应该使用正确的ContentType创建HttpEntity:

Post(url, HttpEntity(ContentTypes.`application/json`, message))

在文档http://spray.io/documentation/1.2.3/spray-http/#content-type-header

中解释了这个问题