将标头添加到Akka HTTP HttpRequest中

时间:2019-03-17 22:09:05

标签: scala akka-http

我有一个现有的Akka HTTP HttpRequest,我想向其中添加两个标头。

val req: HttpRequest = ???
val hs: Seq[HttpHeader] = Seq(RawHeader("a", "b"))
req.addHeaders(hs)

预期:

  • 带有附加标题的新HttpRequest对象

实际:

  • .addHeaders期望java.lang.Iterable并且不会编译。

在Scala中推荐这样做的方法是什么?

有一种解决方法,但是有点笨拙:

req.withHeaders(req.headers ++ hs)

运行Scala 2.12.8和Akka HTTP 10.1.7。

3 个答案:

答案 0 :(得分:2)

一种替代方法是使用foldLeftaddHeader

val req: HttpRequest = ???
val hs: Seq[HttpHeader] = Seq(RawHeader("a", "b"))

hs.foldLeft(req)((r, h) => r.addHeader(h))

答案 1 :(得分:1)

另一种解决方法可能是减少银屑。 addHeadersdefined in the source的大致方式。不幸的是,我不知道为什么addHeaders没有在scala api中公开。

req.mapHeaders(_ ++ hs)

答案 2 :(得分:0)

您可以将现有的HttpRequest复制到带有标头的新HttpRequest

val req: HttpRequest = ???
val hs: Seq[HttpHeader] = Seq(RawHeader("a", "b"))
val reqWithHeaders: HttpRequest = req.copy(headers=hs)