2

Liberator を使用していますが、キーワードをキーとして使用して、POST されたデータをマップに入れるのに苦労しています。これが私のリソースで、テスト用の印刷行がいくつかあります。

(defresource finish_validation
             :allowed-methods [:post]
             :available-media-types ["application/json"]
             :post! (fn [context]
                      (let [params (slurp (get-in context [:request :body]))
                            mapped_params (cheshire/parse-string params)]

                        (println (type params))
                        (println (type mapped_params))
                        (validation/finish mapped_params)))
             :handle-created (println ))

テストのために、curl を使用してデータを投稿しています。

curl -H "Content-Type: application/json" -X POST -d '{"email":"test@foo.com","code":"xyz"}' http://localhost:8080/validate

cheshire はパラメーターをマップに変換しますが、キーはキーワードではありませ{email test@foo.com, code xyz}{:email test@foo.com, :code xyz}

私は何か違うことをするべきですか?これは、データを取得するための正しいアプローチですか?

4

3 に答える 3

0

要件に応じて、さまざまなリング ミドルウェアを使用して投稿データの処理を簡素化できます。これにより、json データを 1 か所で処理できるようになり、各ハンドラー/リソース定義でデータ処理を重複させる必要がなくなります。これにはいくつかの方法があります。params マップまたは json-params マップで、json データをキーワード化されたパラメーターとして追加できます。ring.middleware.formatring.middleware.jsonを見てください。

于 2015-04-17T02:13:40.850 に答える