1

我打算将 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]在请求的正文中发送一个给定的?

4

1 回答 1

0

你想要你的结果,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 请求一起发送的数据。它可以是字符串或字节数组等。

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

于 2013-08-22T12:44:56.583 回答