Próbuję użyć oprogramowania pośredniego typu wrap-json typu wrap-json w mojej aplikacji compojure. Mam prosty handler GET, który zwraca mapę, np. {:foo 1}
, a po kliknięciu adresu URL pierścień odpowiada text/plain
i pustym ciałem odpowiedzi. Nie mogę sprawić, żeby odpowiedziała wersją mapy JSON.Oprogramowanie pośredniczące wrap-json-wrap-json-response i compojure zwraca tekst/zwykły?
Oto mój kod obsługi:
(ns localshop.handler
(:use compojure.core)
(:require [localshop.routes.api.items :as routes-api-items]
[ring.middleware.json :as middleware]
[compojure.handler :as handler]
[compojure.route :as route]))
;; map the route handlers
(defroutes app-routes
(context "/api/item" [] routes-api-items/routes))
;; define the ring application
(def app
(-> (handler/api app-routes)
(middleware/wrap-json-body)
(middleware/wrap-json-params)
(middleware/wrap-json-response)))
Funkcja obsługi trasy dosłownie zwraca mapę, więc kod, który jest na tyle prosta, że myślę, że mógłby opuścić. Jeśli zwróceniem mapy z compojure obsługa trasy jest problem, to może to wszystko?
Dzięki tej anwser byłem ciągnięcie moich włosów. To naprawdę powinno być lepiej udokumentowane. –
Każdy pomysł, dlaczego musi być zawijany w: body? –
Moje najlepsze przypuszczenie jest takie, że metoda może pozwolić na więcej opcji poza treścią odpowiedzi, więc wymaga niejawnego określenia '{: body {}}'. – film42