所以我有一个带有这个签名的函数(akka.http.model.HttpResponse):
def apply(query: Seq[(String, String)], accept: String): HttpResponse
我只是在测试中获得一个值,如下所示:
val resp = TagAPI(Seq.empty[(String, String)], api.acceptHeader)
我想在下面这样的测试中检查它的主体:
resp.entity.asString == "tags"
我的问题是如何获得字符串形式的响应体?
发布于 2016-04-11 04:03:14
import akka.http.scaladsl.unmarshalling.Unmarshal
implicit val system = ActorSystem("System")
implicit val materializer = ActorFlowMaterializer()
val responseAsString: Future[String] = Unmarshal(entity).to[String]
发布于 2015-09-01 16:47:21
由于Akka Http是基于流的,因此实体也是流的。如果您确实需要一次使用整个字符串,可以将传入的请求转换为Strict
请求:
这是通过使用toStrict(timeout: FiniteDuration)(mat: Materializer)
接口在给定的时间限制内将请求收集到一个严格的实体中来完成的(这一点很重要,因为您不想在传入请求实际上永远不会结束的情况下“尝试永远收集实体”):
import akka.stream.ActorFlowMaterializer
import akka.actor.ActorSystem
implicit val system = ActorSystem("Sys") // your actor system, only 1 per app
implicit val materializer = ActorFlowMaterializer() // you must provide a materializer
import system.dispatcher
import scala.concurrent.duration._
val timeout = 300.millis
val bs: Future[ByteString] = entity.toStrict(timeout).map { _.data }
val s: Future[String] = bs.map(_.utf8String) // if you indeed need a `String`
发布于 2017-07-27 11:15:48
你也可以试试这个。
responseObject.entity.dataBytes.runFold(ByteString(""))(_ ++ _).map(_.utf8String) map println
https://stackoverflow.com/questions/32315789
复制相似问题