Как конвертировать результаты 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))}
И пока вы занимаетесь этим, не помешает указать тип контента и код ответа.