2016-09-12 15 views
4

REST URLを呼び出すためにAkka-Httpを使用しようとしています。私はakkaのドキュメントのthisの例に従っています。 これを使用して、残りの電話をかけることができます。しかし、私はカスタムリクエストヘッダを追加する方法を見つけることができません。私はModeledCustomHeaderを使ってみましたが、依然としてリクエストがヘッダを持っていません。ここに私の例があります。Akka Httpクライアント:カスタムヘッダー

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) 
    } 

の代わりのaddHeaderですが、私は)(addHeadersてみましたが、それはコンパイルエラーを与えているとして、配列(ApiTokenHeader)が動作していません。

val s: HttpRequest = HttpRequest(uri = cmd.url, headers = Seq(ApiTokenHeader(cmd.apiKey))) 

Error:(55, 66) type mismatch; found : Seq[com.myapp.http.core.ApiTokenHeader] required: 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

あなたのヘッダが 'HttpHeader'を拡張する必要がある' Seq'を使用できるようにするには。 –

+0

@EndeNeu単一のaddHeaderメソッドでも、私が追加したカスタムヘッダーはリクエストに含まれていません。 –

+1

なぜ、renderInRequestをfalseにしましたか? – leachbj

答えて

7

試して、それは単に あなたの代わりにRawHeadersでHttpMessageのメソッドを使用することができます:

HttpRequest(GET, "/example.com/some") 
    .withHeaders(
    RawHeader("X-CSRF-TOKEN", ...)) 
1

あなたは1

不変ではないのではなく、scala.collection.immutable.Seqを使用する必要があります。またrenderInRequestsを設定することを忘れないでくださいそして/またはrenderInResponsesがtrueに設定されていなければ、ヘッダは消えます。

関連する問題