【问题标题】:Compojure-Api return vector of schema objectsCompojure-Api 返回模式对象的向量
【发布时间】:2017-02-12 07:59:27
【问题描述】:

我已经开始学习 Luminus 框架以进入用于 Web 应用程序的 Clojure(脚本)。对于 RESTful 服务框架,建议使用 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

对于服务有一个schema(因为java的Thread所以叫Threadd):

(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))"}

不幸的是,这对我来说并不明显。如何返回指定架构的多个对象?可以transit+json格式退回吗?

【问题讨论】:

    标签: clojure swagger compojure-api


    【解决方案1】:

    您可以为a sequence of 线程定义另一个架构:

    (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)))
    

    【讨论】:

    • 谢谢,成功了!我之前使用过 [Threadd] 选项,但使用的是transit-writer,所以出错了。顺便说一句,Compojure-Api 会以Accept 标头指定的格式返回数据吗?我需要transit-writer吗?
    • 是的,它应该(compojure-api 在README 中突出显示它:客户端可协商格式:JSON、EDN、YAML 和 Transit(JSON 和 MessagePack))。
    猜你喜欢
    • 2016-06-07
    • 1970-01-01
    • 1970-01-01
    • 2023-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-02
    • 1970-01-01
    相关资源
    最近更新 更多