J'utilise Liberator, et j'ai du mal à obtenir mes données POSTed dans une carte en utilisant des mots-clés comme clés. Voici ma ressource, avec quelques PRINTLINES pour les tests:Obtenir une carte clojure avec des mots-clés à partir d'un POST en utilisant Liberator
(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))
Pour les tests, je suis l'affichage des données à l'aide Ondulations:
curl -H "Content-Type: application/json" -X POST -d '{"email":"[email protected]","code":"xyz"}' http://localhost:8080/validate
convertit les cheshire params dans une carte, mais les touches sont pas les mots-clés: je reçois {email [email protected], code xyz}
comme la sortie, au lieu de l'espéré {:email [email protected], :code xyz}
.
Dois-je faire quelque chose différemment? Est-ce la bonne approche pour obtenir les données?
Je recommande d'utiliser les middleware 'wrap-keyword-params' et' wrap-params' de l'anneau. Ceci est beaucoup plus sec, car vous devrez analyser les paramètres pour chaque décision dans le libérateur. Alors qu'avec le middleware en anneau, ceci est fait pour chaque requête. Donc déjà converti et accessible dans chaque décision. – Seth