re-frame ベースの UI があり、re-frame-http-fxを使用してサーバーと通信しようとしています。送信と応答は機能しているようです。ただし、JSON 本体をサーバー上の Clojure マップに解析する方法がわかりません。
これが私handler.clj
が得ることができる最小限のものです:
(ns my.handler
(:require [compojure.core :refer [GET POST defroutes]]
[compojure.route :refer [resources]]
[ring.util.response :refer [resource-response]]
[ring.middleware.json :refer [wrap-json-response wrap-json-body]]))
(defn json-post [request]
(let [body (:body request)]
(prn body)
body))
(defroutes routes
(GET "/" [] (resource-response "index.html" {:root "public"}))
(POST "/post" request json-post)
(resources "/"))
(def handler (wrap-json-response (wrap-json-body routes {:keywords? true})))
私が理解している限り、wrap-json-body
ミドルウェアはリクエスト本文を解析済みバージョン (マップ?) に置き換える必要があります。
ただし、ハンドラーから得られる出力(prn body)
はjson-post
次のようなものです。
#object[org.httpkit.BytesInputStream 0xda8b162 "BytesInputStream[len=41]"]
(prn (:title body))
私が得たようなものを試してみるとnil
(元の map-turned-json-request には:title
、リクエストとレスポンスの両方の本文が含まれていますが)。
リクエストとレスポンスには正しい json が含まれています。要求Content-Type
は正しくapplication/json
(sent by re-frame-http-fx
) に設定されています。バッファの長さ (41) も、要求に応じた正しい本文の長さです。
試してみたいものがなくなってきました。何か案は?