我打算将Iteratees与Play2 HTTP client's methods一起使用。 Play2的docs非常复杂。
采用这些Play2方法(此GET method):
/**
* 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)
/**
* 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]
?
答案 0 :(得分: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请求发送的数据。它可以是字符串或字节数组等。
注意:我没有尝试过这段代码,但这会给你正确的方向。