我是Scala和Spray的新手。我已經根據此博客文章中的說明編寫了一個簡單的REST API。 http://www.smartjava.org/content/first-steps-rest-spray-and-scala如何從服務器端用噴霧器獲取http請求頭信息RestAPI
而且所有按預期工作。
現在我想修改程序打印的HTTP標頭狀編碼,語言,遠程地址,等等。我想打印所有的報頭信息(目的是爲了記錄這些信息)
但我無法找到適當的文檔或示例。任何人都可以請幫我完成這件事。
我是Scala和Spray的新手。我已經根據此博客文章中的說明編寫了一個簡單的REST API。 http://www.smartjava.org/content/first-steps-rest-spray-and-scala如何從服務器端用噴霧器獲取http請求頭信息RestAPI
而且所有按預期工作。
現在我想修改程序打印的HTTP標頭狀編碼,語言,遠程地址,等等。我想打印所有的報頭信息(目的是爲了記錄這些信息)
但我無法找到適當的文檔或示例。任何人都可以請幫我完成這件事。
如果需要提取特定標頭:
optionalHeaderValueByName("Encoding") { encodingHeader =>
println(encodingHeader)
complete("hello")
}
替代地可以訪問原始請求對象,並直接提取標頭。下面是記錄所有的頭自定義指令:
def logHeaders(): Directive0 = extract(_.request.headers).map(println)
使用
logHeaders() {
complete("hello")
}
感謝您的快速回答。對我來說,第一種方式是工作。但我更喜歡另一種方式,它給調用'foreach'時的語法錯誤-------錯誤:(37,61)值foreach不是spray.routing.Directive1 [List [spray。 http.HttpHeader]] def logHeaders():Directive0 = extract(_。request.headers).foreach(println)--------- –
woops,試試'map'而不是'foreach' –
map也沒有幫助。我得到的編譯錯誤爲-------錯誤:(42,51)值foreach不是spray.routing.Directive1的成員def logHeaders1()= extract(__list.html){def.hrp.HttpHeader] def logHeaders1 .reach(println)).-以上是我得到的錯誤,很遺憾,我無法從spray.routing.Directive1 –
這裏就是我得到了它的工作。
指令:
def logHeaders(innerRoute: Route): (RequestContext => Unit) = extract(_.request.headers) { headers =>
headers.foreach(h => logger.info("header: {} = {}", h.name, h.value))
innerRoute
}
用法:
logHeaders() {
complete("hello")
}
嗨,我仍然無法找到一個方法來打印所有的HTTP標頭。在Java中,我們可以將它作爲一個集合並遍歷它並打印全部。 「我只是想知道爲什麼噴霧和斯卡拉這麼辛苦?' –