首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用字符串键的映射查询参数

使用字符串键的映射查询参数
EN

Stack Overflow用户
提问于 2016-11-29 22:46:15
回答 2查看 848关注 0票数 0

我知道我可以将查询字符串映射为keyworkd映射。

代码语言:javascript
复制
(defroutes my-routes
  (GET "/" {params :query-params} params))

但是,对于字符串键控映射,是否有同样的方法呢?(使用组合式或环型)

这里的重点不是迭代映射或使用函数,而是默认使用字符串键创建它。

代码语言:javascript
复制
{ :a "b" } -> {"a" "b"}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-30 08:54:23

默认情况下,Compojure 1.5.1不解析任何查询字符串(不使用任何中间件)。然而,这在早期版本中可能有所不同。

代码语言:javascript
复制
(require '[compojure.core :refer :all])
(require '[clojure.pprint :refer [pprint]])

(defroutes handler
  (GET "/" x
       (with-out-str (pprint x)))) ;; just a way to receive a pretty printed string response

$ curl localhost:3000/?a=b
{:ssl-client-cert nil,
 :protocol "HTTP/1.1",
 :remote-addr "127.0.0.1",
 :params {},  ;; EMPTY!
 :route-params {},
 :headers
 {"user-agent" "curl/7.47.1", "accept" "*/*", "host" "localhost:3000"},
 :server-port 3000,
 :content-length nil,
 :compojure/route [:get "/"],
 :content-type nil,
 :character-encoding nil,
 :uri "/",
 :server-name "localhost",
 :query-string "a=b",  ;; UNPARSED QUERY STRING
 :body
 #object[org.eclipse.jetty.server.HttpInputOverHTTP 0x6756d3a3 "HttpInputOverHTTP@6756d3a3"],
 :scheme :http,
 :request-method :get}

Ring提供了ring.params.wrap-params中间件,该中间件解析查询字符串并在params-key下面创建查询字符串的哈希映射:

代码语言:javascript
复制
(defroutes handler
  (wrap-params (GET "/" x
                 (prn-str (:params x)))))

$ curl localhost:3000/?a=55
{"a" "55"}

此外,还可以使用ring.params.wrap-params

代码语言:javascript
复制
(defroutes handler
  (wrap-params (wrap-keyword-params (GET "/" x
                                     (prn-str (:params x))))))

$ curl localhost:3000/?a=55
{:a "55"}
票数 1
EN

Stack Overflow用户

发布于 2016-11-29 23:53:31

不确定构成,但您可以自己撤销它:

代码语言:javascript
复制
(use 'clojure.walk)

(stringify-keys {:a 1 :b {:c {:d 2}}}) 
;=> {"a" 1, "b" {"c" {"d" 2}}}

https://clojuredocs.org/clojure.walk/stringify-keys

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40877192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档