我有一个基于 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
(由 发送re-frame-http-fx
)。根据请求,缓冲区 (41) 的长度也是正确的正文长度。
我已经没有东西可以尝试了。有任何想法吗?