Tôi đang cố gắng sử dụng phần mềm trung gian phản hồi bọc-json của ring-json trong ứng dụng tương tác của tôi. Tôi có một trình xử lý GET đơn giản trả về một bản đồ, như {:foo 1}
và khi tôi nhấn URL, vòng phản hồi với text/plain
và một nội dung phản hồi trống. Tôi không thể làm cho nó phản ứng với phiên bản JSON của bản đồ.middle-wrap-json-wrap-json-phản hồi middleware và compojure trả về văn bản/đồng bằng?
Dưới đây là code xử lý của tôi:
(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)))
Chức năng xử lý tuyến đường theo nghĩa đen chỉ trả về một bản đồ, do đó mã cho rằng đơn giản là đủ mà tôi nghĩ rằng tôi có thể bỏ qua. Nếu trả lại một bản đồ từ một bộ xử lý tuyến tính compojure là vấn đề, thì có lẽ đó là nó?
Cám ơn anwser này, tôi đã kéo tóc của tôi ra. Điều này thực sự cần phải được tài liệu tốt hơn. –
Bất kỳ ý tưởng nào tại sao nó phải được bọc trong: cơ thể? –
Dự đoán tốt nhất của tôi là vì phương pháp này có thể cho phép nhiều tùy chọn khác hơn so với phần thân của phản hồi, vì vậy nó yêu cầu bạn chỉ định rõ ràng '{: body {}}'. – film42