您需要自己编写或生成一个自定义处理函数,该函数将 uri 字符串解析为参数,将它们按正确的顺序排序,并使用它们调用您的目标处理程序。
由于您使用的是环,因此可以:uri
在环请求映射中的键下找到 uri 字符串。
Compojure 不能用于调度,因为它不是按照您想要的方式工作的。
这是一个简化的示例,其中使用已解析参数的哈希图调用目标处理程序来说明这个想法:
(defn handle
[{:keys [uri] :as request}]
(let [[root & more] (keep not-empty (clojure.string/split uri #"/")]
(if (= "service1" root)
(->> more
(partition 2)
(reduce (fn [acc [k v]]
(assoc acc
(keyword k) v) ;; TODO: parse value if necessary
)
{})
;; TODO: invoke your handler fn here
)
;; TODO: invoke compojure handler for other routes with request here
)))
(handle {:uri "/service1/param2/value2/param4/value4/param1/value1"})
;; {:param1 "value1", :param4 "value4", :param2 "value2"}