不幸的是,在我的情况下,Unmarshal
to String 无法正常工作,抱怨:Unsupported Content-Type, supported: application/json
。那将是更优雅的解决方案,但我不得不使用另一种方式。在我的测试中,我使用从响应实体中提取的 Future 和 Await(来自 scala.concurrent)从 Future 中获取结果:
Put("/post/item", requestEntity) ~> route ~> check {
val responseContent: Future[Option[String]] =
response.entity.dataBytes.map(_.utf8String).runWith(Sink.lastOption)
val content: Option[String] = Await.result(responseContent, 10.seconds)
content.get should be(errorMessage)
response.status should be(StatusCodes.InternalServerError)
}
如果您需要遍历响应中的所有行,可以使用runForeach
Source:
response.entity.dataBytes.map(_.utf8String).runForeach(data => println(data))