У меня есть интерфейс на основе обратного кадра и попробуйте установить связь с моим сервером с помощью re-frame-http-fx. Кажется, что работает отправка и ответ. Тем не менее, я не могу понять, как разобрать тело JSON на карту Clojure на сервере.Проанализируйте тело JSON из HTTP-запроса (с кольцом и повторным кадром-http-fx)
Вот мой 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
(хотя оригинальная карта поворачивал JSON-запрос содержит :title
, а также орган запроса и ответа).
В запросе и ответе содержится правильный json. Запрос Content-Type
правильно установлен на application/json
(отправлено re-frame-http-fx
). Длина буфера (41) также является правильной длиной тела по запросу.
У меня заканчиваются вещи, чтобы попробовать. Есть идеи?
Можете ли вы попытаться сорвать поток ввода, чтобы увидеть, что в нем находится? И можете ли вы попробовать, не обернув ответ JSON? –
Засорение входного потока дает мне необработанное тело запроса, которое содержит ожидаемый json. Я не пытался удалить кольцевое промежуточное ПО, потому что я наткнулся на решение (см. Ответ). Спасибо и извините за неприятности. – notan3xit