В Clojure/Compojure, как преобразовать карту в строку запроса URL?Как преобразовать карту в строку запроса URL в Clojure/Compojure/Ring?
{:foo 1 :bar 2 :baz 3}
в
foo=1&bar=2&baz=3
Есть ли способ утилита сделать это в compojure?
В Clojure/Compojure, как преобразовать карту в строку запроса URL?Как преобразовать карту в строку запроса URL в Clojure/Compojure/Ring?
{:foo 1 :bar 2 :baz 3}
в
foo=1&bar=2&baz=3
Есть ли способ утилита сделать это в compojure?
Да, есть утилита для этого уже, что не связано с икота или сворачивание собственной строки/присоединение/функция URLEncoder:
user=> (ring.util.codec/form-encode {:foo 1 :bar 2 :baz 3})
"foo=1&bar=2&baz=3"
user=>
Compojure зависит от кольца/кольца-сердечника, в которое входит ring.util.codec, поэтому у вас его уже есть.
Что-то вроде:
(defn params->query-string [m]
(clojure.string/join "&" (for [[k v] m] (str (name k) "=" v))))
должен это сделать ...
РЕПЛ сессия:
user> (defn params->query-string [m]
(clojure.string/join "&"
(for [[k v] m]
(str (name k) "=" (java.net.URLEncoder/encode v)))))
#'user/params->query-string
user> (params->query-string {:foo 1 :bar 2 :baz 3})
"foo=1&bar=2&baz=3"
user>
Я также могу использовать 'java. net.URLEncoder.encode' для каждого значения на карте, то есть '(для [[kv] m] (str (name k)" = "(java.net.URLEncoder/encode v)))'. – user100464
Я сделал то же самое, но есть ли способ утилиты для этого? – Sathish
@Sathish [Hiccup] (http://weavejester.github.com/hiccup/) предоставляет некоторые [релевантные функции] (http://weavejester.github.com/hiccup/hiccup.util.html#var-url): '(hiccup.util/url"/hello "{: a 1: b 2}) =>"/hello? a = 1 & b = 2 "'. Если вы не хотите добавлять зависимость от Hiccup только для одной функции утилиты, написать эту функцию на самом деле не очень важно. –
Возможный дубликат [Clojure building URL из составных частей] (http://stackoverflow.com/questions/3644125/clojure-building-of-url-from-constituent-parts) –