我打算将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请求一起发送的数据。它可以是字符串或字节数组等
注意:我还没有尝试过这个代码,但这会给你正确的方向。