我正在使用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))}
当您使用它时,指定内容类型和响应代码不会有什么坏处。