加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

akka HttpResponse将body读取为String scala

发布时间:2020-12-16 09:29:23 所属栏目:安全 来源:网络整理
导读:所以我有一个带有这个签名的函数(akka.http.model.HttpResponse): def apply(query: Seq[(String,String)],accept: String): HttpResponse 我只是在测试中得到一个值,如: val resp = TagAPI(Seq.empty[(String,api.acceptHeader) 我想在测试中检查它的身体
所以我有一个带有这个签名的函数(akka.http.model.HttpResponse):

def apply(query: Seq[(String,String)],accept: String): HttpResponse

我只是在测试中得到一个值,如:

val resp = TagAPI(Seq.empty[(String,api.acceptHeader)

我想在测试中检查它的身体,例如:

resp.entity.asString == "tags"

我的问题是如何将响应体作为字符串?

解决方法

由于Akka Http是基于流的,因此该实体也是流式传输.如果您确实需要一次完整的字符串,可以将传入的请求转换为严格的字符串:

这是通过使用toStrict(timeout:FiniteDuration)(mat:Materializer)API在给定时间限制内将请求收集到严格实体中完成的(这很重要,因为您不想“尝试永远收集实体”万一传入请求确实永远不会结束):

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`

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读