2015-07-11 109 views
1

我得到身體和頭從這樣的請求特定的HTTP標頭:我怎樣才能在的Compojure請求

(POST "/api/item" {body :body headers :headers} (create-item body headers)) 

身體被包裹,所以我得到一個關鍵字地圖,我可以很容易採取從那個值:

(def app 
    (-> (handler/api app-routes) 
     (middleware/wrap-json-body {:keywords? true}) 
     (middleware/wrap-json-response))) 

簡單:

(:item-name body) 

我怎樣才能實現與標題相同,或只是簡單地採取一個特定的標題值?我是否必須首先將標題映射到Clojure數據結構?

如果我打印頭,我得到這樣的:

({host localhost:3000, user-agent Mozilla/5.0}) 

回答

2

標頭是已在Clojure的數據結構。如果您想更好地瞭解目前的數據類型,請使用prn而不是println,您將看到它是一個以字符串作爲關鍵字的哈希映射。

(:foo x)(get x :foo)的快捷方式。對於帶有字符串鍵的哈希映射,您可以使用例如。 (get headers "host")。在clojure.walk,clojure.walk/keywordize-keys中有一個函數,它將數據結構的關鍵字通過嵌套結構遞歸地轉換爲關鍵字。恕我直言,這是一個有點傻,在大多數情況下最好使用get和字符串鍵。

+1

我已經能夠到達解決方案了,謝謝。事實證明,我需要'(獲得(第一標題)「主機」)'因爲標題出現在'ArraySeq'中。 – alundy