2015-09-14 85 views
4

我是Scala和Spray的新手。我已經根據此博客文章中的說明編寫了一個簡單的REST API。 http://www.smartjava.org/content/first-steps-rest-spray-and-scala如何從服務器端用噴霧器獲取http請求頭信息RestAPI

而且所有按預期工作。

現在我想修改程序打印的HTTP標頭狀編碼,語言,遠程地址,等等。我想打印所有的報頭信息(目的是爲了記錄這些信息)

但我無法找到適當的文檔或示例。任何人都可以請幫我完成這件事。

+0

嗨,我仍然無法找到一個方法來打印所有的HTTP標頭。在Java中,我們可以將它作爲一個集合並遍歷它並打印全部。 「我只是想知道爲什麼噴霧和斯卡拉這麼辛苦?' –

回答

6

如果需要提取特定標頭:

optionalHeaderValueByName("Encoding") { encodingHeader => 
    println(encodingHeader) 
    complete("hello") 
} 

替代地可以訪問原始請求對象,並直接提取標頭。下面是記錄所有的頭自定義指令:

def logHeaders(): Directive0 = extract(_.request.headers).map(println) 

使用

logHeaders() { 
    complete("hello") 
} 
+0

感謝您的快速回答。對我來說,第一種方式是工作。但我更喜歡另一種方式,它給調用'foreach'時的語法錯誤-------錯誤:(37,61)值foreach不是spray.routing.Directive1 [List [spray。 http.HttpHeader]] def logHeaders():Directive0 = extract(_。request.headers).foreach(println)--------- –

+0

woops,試試'map'而不是'foreach' –

+0

map也沒有幫助。我得到的編譯錯誤爲-------錯誤:(42,51)值foreach不是spray.routing.Directive1的成員def logHeaders1()= extract(__list.html){def.hrp.HttpHeader] def logHeaders1 .reach(println)).-以上是我得到的錯誤,很遺憾,我無法從spray.routing.Directive1 –

2

這裏就是我得到了它的工作。

指令:

def logHeaders(innerRoute: Route): (RequestContext => Unit) = extract(_.request.headers) { headers => 
    headers.foreach(h => logger.info("header: {} = {}", h.name, h.value)) 
    innerRoute 
} 

用法:

logHeaders() { 
    complete("hello") 
}