如何使用Play2 HTTP客户端的迭代方法?



我打算将Iteratees与Play2 HTTP客户端的方法一起使用。Play2的文档相当复杂。

采取以下Play2方法(此GET方法):

 /**
 * performs a GET with supplied body
 * @param consumer that's handling the response
 */
 def get[A](consumer: ResponseHeaders => Iteratee[Array[Byte], A]):
   Future[Iteratee[Array[Byte], A]] =
     prepare("GET").executeStream(consumer)

这种PUT方法:

 /**
 * performs a PUT with supplied body
 * @param consumer that's handling the response
 */
 def putAndRetrieveStream[A, T](body: T)
   (consumer: ResponseHeaders => Iteratee[Array[Byte], A])
     (implicit wrt: Writeable[T], ct: ContentTypeOf[T]):
       Future[Iteratee[Array[Byte], A]] =
         prepare("PUT", body).executeStream(consumer)

如何调用这个get方法,以便将响应的正文作为Array[Byte]?我如何调用putAndRetrieveStream方法,以便它在请求体中发送给定的Array[Byte]

您希望结果为Array[Byte],因此需要创建一个Iteratee[Array[Byte],Array[Byte]]:

val resp  = req.get((r:ResponseHeaders => Iteratee.consume[Array[Byte]]()))
resp onComplete {
    case Success(iter) => iter match {
        case Done(bytes,rem) => do_something_with_bytearray(bytes)       
    }
    case Failure(t) => do_something(t)
}

类似:

val resp = req.putAndRetrieveStream(data)((r:ResponseHeaders => Iteratee.consume[Array[Byte]]()))

其中,data是要与put请求一起发送的数据。它可以是字符串或字节数组等

注意:我还没有尝试过这个代码,但这会给你正确的方向。

相关内容

  • 没有找到相关文章

最新更新