我正在尝试使用Akka-Http来调用REST URL。我正在关注akka文档中的this示例。 使用此我可以进行其余的通话。但我无法找到如何添加自定义请求标头。我尝试使用ModeledCustomHeader,但仍然请求没有标题。这是我的例子。
final class ApiTokenHeader(token: String) extends ModeledCustomHeader[ApiTokenHeader] {
override def renderInRequests = false
override def renderInResponses = false
override val companion = ApiTokenHeader
override def value: String = token
}
object ApiTokenHeader extends ModeledCustomHeaderCompanion[ApiTokenHeader] {
override val name = "apiKey"
override def parse(value: String) = Try(new ApiTokenHeader(value))
}
这就是我调用的方式,
def invokeHttpRequest(cmd: WSRequestCommand) = {
val s: HttpRequest = HttpRequest(uri = cmd.url).addHeader(ApiTokenHeader(cmd.apiKey))
sender ! http.singleRequest(s)
}
我尝试使用addHeaders()代替addHeader,但Seq(ApiTokenHeader)无法正常工作,因为它会产生编译错误。
val s: HttpRequest = HttpRequest(uri = cmd.url, headers = Seq(ApiTokenHeader(cmd.apiKey)))
错误:(55,66)类型不匹配;发现: 需要Seq [com.myapp.http.core.ApiTokenHeader]: scala.collection.immutable.Seq [akka.http.scaladsl.model.HttpHeader] val s:HttpRequest = HttpRequest(uri = cmd.url,headers = Seq(ApiTokenHeader(cmd.apiKey))) //。的addHeader(ApiTokenHeader(cmd.apiKey))
有人可以帮我为我的请求添加多个自定义标头吗?我在这里做错了什么?
答案 0 :(得分:16)
尝试简单地做 你可以使用带有RawHeaders的HttpMessage上的方法:
HttpRequest(GET, "/example.com/some")
.withHeaders(
RawHeader("X-CSRF-TOKEN", ...))
答案 1 :(得分:2)
您应该使用scala.collection.immutable.Seq
而不是不可变的
另外,不要忘记将renderInRequests
和/或renderInResponses
设置为true,否则您的标题会消失