我怎样才能在的Compojure请求
问题描述:
我得到身体和头从这样的请求特定的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})
答
标头是已在Clojure的数据结构。如果您想更好地了解目前的数据类型,请使用prn
而不是println
,您将看到它是一个以字符串作为关键字的哈希映射。
(:foo x)
是(get x :foo)
的快捷方式。对于带有字符串键的哈希映射,您可以使用例如。 (get headers "host")
。在clojure.walk
,clojure.walk/keywordize-keys
中有一个函数,它将数据结构的关键字通过嵌套结构递归地转换为关键字。恕我直言,这是一个有点傻,在大多数情况下最好使用get
和字符串键。
我已经能够到达解决方案了,谢谢。事实证明,我需要'(获得(第一标题)“主机”)'因为标题出现在'ArraySeq'中。 – alundy