如何以JSON格式返回查询结果?

弗雷德001

在此示例中,我创建了一个简单的api,用于查询数据库并取回所有文档。我希望将响应作为json对象返回。但是实际输出是:{:text "some text", :title "title", :id "1"}{:text "some more text", :title "another title", :id "2"}Clojure我的新手,所以可能缺少明显的东西。

handler.clj

(ns app.handler
  (:use compojure.core)
  (:use cheshire.core)
  (:use app.document)
  (:require [compojure.handler :as handler]
            [ring.middleware.json :as middleware]
            [compojure.route :as route]))

(defroutes app-routes
           (context "/documents" [] (defroutes documents-routes)
                                    (GET  "/" [] (list-documents)))
           (route/not-found "Not Found"))

(def app
  (-> (handler/api app-routes)
      (middleware/wrap-json-body)
      (middleware/wrap-json-response)))

storage.clj

 (ns app.storage
  (:import com.mchange.v2.c3p0.ComboPooledDataSource)
  (:require [clojure.java.jdbc :refer :all]))

  (def db
    {
      :classname   "org.sqlite.JDBC"
      :subprotocol "sqlite"
      :subname     "src/storage/sqlite.db"
    }
  )

document.clj

(ns app.document
  (:use app.storage)
  (:use ring.util.response)
  (:require [clojure.java.jdbc :refer :all]))

(defn list-documents []
  (let [results (query db ["select * from documents"])]
    (prn results)

    (cond (empty? results)
          (not_found ())
          :else
          (response (lazy-seq results)))))
疯了

中间件,它将带有地图或主体的矢量的响应转换为JSON响应。

来自的文档字符串wrap-json-response您正在给它一个序列,但它只接受地图或向量。更改(response (lazy-seq results))(response (vec results))

编辑:改变了我的整个答案,我误解了。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章