Compojure-Api возвращает вектор объектов схемы

Я начал изучать фреймворк Luminus, чтобы войти в Clojure(скрипт) для веб-приложений. Для сервисов RESTful Framework предлагает использовать swagger / compojure-api. Примеры были полезны, но я не могу найти ни одного для возврата коллекций.

Вот моя модель:

CREATE TABLE thread
(id INTEGER PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(30));

И запрос Конмана:

-- :name get-threads :? :*
-- :doc selects all threads
SELECT * FROM thread

Для сервиса есть схема (она называется Threadd из-за потока Java):

(s/defschema Threadd {:id s/Int
                      :name s/Str})

Наконец, в сервис-маршрутах (defapi выражение), простой GET:

(GET "/thread" []
      :return       Threadd
      :summary      "All threads"
      (ok  (db/get-threads)))

Приложение запускается, и Swagger-UI возвращает это по моему запросу (формат edn):

{:errors "(not (map? a-clojure.lang.LazySeq))"}

К сожалению, это не очевидно для меня. Как я могу вернуть несколько объектов с указанной схемой? Могу ли я вернуть их в формате транзит +json?

1 ответ

Решение

Вы можете определить другую схему для последовательности потоков:

(s/defschema Threads [Threadd])

и укажите его как тип возврата вашей конечной точки:

(GET "/thread" []
      :return       Threads
      :summary      "All threads"
      (ok  (db/get-threads)))

Вы также можете определить его в строке:

(GET "/thread" []
      :return       [Threadd]
      :summary      "All threads"
      (ok  (db/get-threads)))
Другие вопросы по тегам