11

URL クエリ文字列から値を取得しようとしていますが、マップであると思われるものを返すことができますが、以下のコードを使用すると、期待どおりに処理されません。返されたクエリ文字列データ構造の特定の値にアクセスする方法を教えてもらえますか?

http://localhost:8080/remservice?foo=bar

(defroutes my-routes
  (GET "/" [] (layout (home-view)))
  (GET "/remservice*" {params :query-params} (str (:parameter params))))
4

4 に答える 4

20

にアクセスするには、ハンドラーをラップするcompojure.handler/apiか、適切なミドルウェアを追加する必要があります。これは、 では自動的に発生していましたが、現在は発生しません。これを行うと、クエリ文字列としてヒットすると、分割フォームがバインドされます。compojure.handler/site:query-paramsdefroutes{params :query-params}params{"foo" "bar"}/remservicefoo=bar

(または、手動で追加することもできます。wrap-paramsこれらはさまざまなring.middleware.*名前空間に存在します。名前については、 (Compojure 1.0.1 の関連ファイルへのリンク)のコードを参照してください。)compojure.handler

例えば

(defroutes my-routes
  (GET "/remservice*" {params :query-params}
       (str params)))

(def handler (-> my-routes compojure.handler/api))

; now pass #'handler to run-jetty (if that's what you're using)

をクリックすると、 -- Clojure マップに解析されたクエリ文字列のテキスト表現が表示されますhttp://localhost:8080/remservice?foo=bar{"foo" "bar"}

于 2012-01-23T01:47:13.917 に答える
-1

ラッパーを必要とせず、:asディレクティブを使用できるcompojure 1.1.5で運が良かった

(GET "/tweet/:folder/:detail" [folder detail :as req]
  (twitter-controller/tweet folder detail (-> req :params :oauth_verifier))
于 2013-09-26T14:40:29.197 に答える