如何将 korma 选择结果转换为 json 用于休息服务 (compojure)



我正在使用compojure,cheshire和korma(以及postgre db(来创建休息服务。我创建了一个具有以下结构的两个字符串字段(名称和描述(的表:

(defentity posts
  (pk :id)
  (table :posts)
  (entity-fields :name :description))

我可以在此表中插入记录,但是当我尝试执行时

(defn get-all-posts [] 
  (select posts))

并从服务器返回结果

defroutes app-routes
 (GET "/" [] (get-start))
 (context "/posts" []
   (GET "/" [] (get-all-posts))
 ...

我收到这样的错误:java.lang.IllegalArgumentException没有方法的实现::协议的渲染:#'compojure.response/Renderable 找到类:clojure.lang.PersistentVector

如我所见,我需要将帖子集合转换为 json。怎么办?

环响应可以是映射或字符串。如果它们是映射,那么它们使用一些键(例如:status和:body(来定义响应并设置cookie等。您可能希望通过将对(get-all-posts)的调用包装在generate-string中来显式地将响应从 Clojure 序列 (edn( 转换为 JSON(因为您使用的是 Cheshire(:

 {:status 200
  :content-type "application/json; charset=UTF-8"
  :body (cheshire/generate-string (get-all-posts))}

当您使用它时,指定内容类型和响应代码不会有什么坏处。

相关内容

  • 没有找到相关文章

最新更新