Compojure: как отобразить параметры запроса

Я пытаюсь сделать любое из следующих сопоставлений для отображения http://mysite.org/add?http://sitetoadd.com или http://mysite.org/add?u=http://sitetoadd.com

  (GET "/add?:url" [url] url)
  (GET "/add?u=:url" [url] url)
  (GET "/add" {params :params} (params :u))
  (GET "/add" {params :params} (params "u"))
  (GET "/add" [u] u)

Но это просто терпит неудачу, и я не знаю почему. С другой стороны, это работает:

  (GET "/add/:url" [url] url)

но я не могу использовать его, потому что мне нужно передать URL-адрес, а http://mysite.org/add/http://sitetoadd.com является недопустимым, а http://mysite.org/add?http://sitetoadd.com is ok.

EDIT: демпинг request Я видел, что params пуст. Я думал, что он будет содержать POST и параметры GET, но единственное место, где я могу найти параметры, которые я передаю, находится в : строка запроса ( "u = asd" ), Он кажется, что для анализа строк запроса требуется промежуточное программное обеспечение. Кстати, мой вопрос стоит на месте.

Ответ 1

См. https://github.com/weavejester/compojure в разделе "Нарушение изменений". По умолчанию карта params больше не привязана. Если у вас есть пример маршрутов внутри "(defroutes main-routes...)", убедитесь, что вы активируете его через "(маршруты-обработчики/основные маршруты" ), как описано в https://github.com/weavejester/compojure/wiki/Getting-Started, так как это метод сайта или api, который гарантирует привязку карты params по умолчанию.

Вот пример, который работает:

(ns hello-world
  (:use compojure.core, ring.adapter.jetty)
  (:require [compojure.route :as route]
            [compojure.handler :as handler]))

(defroutes main-routes
  (GET "/" {params :params} (str "<h1>Hello World</h1>" (pr-str params)))
  (route/not-found "<h1>Page not found</h1>"))

(defn -main [& m]
  (run-jetty (handler/site main-routes) {:port 8080}))