0

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) も、要求に応じた正しい本文​​の長さです。

試してみたいものがなくなってきました。何か案は?

4

1 に答える 1