Как конвертировать результаты korma select в 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. Как это сделать?

1 ответ

Решение

Кольцевые ответы могут быть либо картой, либо строкой. Если они являются картой, то они используют несколько ключей, таких как:status и:body, чтобы определить ответ, установить куки и т. Д. Вы можете явно преобразовать свой ответ из последовательности Clojure (edn) в JSON, заключив вызов в (get-all-posts) в generate-string (так как вы используете Чешир):

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

И пока вы занимаетесь этим, не помешает указать тип контента и код ответа.

Другие вопросы по тегам