【问题标题】:Compojure Rest API: Show body response in JSON formatCompojure Rest API:以 JSON 格式显示正文响应
【发布时间】:2017-12-15 08:56:29
【问题描述】:

我是 compojure api 的新手。

如何以 JSON 格式显示正文响应?

这是我写的代码

core.clj

(ns clojure-dauble-business-api.core
  (:require [compojure.api.sweet :refer :all])
  (:require [ring.util.http-response :refer :all])
  (:require [clojure-dauble-business-api.dbdev :as dbdev])
  (:require [yesql.core :refer [defquery]])
  (:require [cheshire.core :as json])
  (:require [ring.util.response :as response])
  (:require [clojure-dauble-business-api.logic :as logic])
  (:require [clojure.tools.logging :as log])
  (:require [clojure-dauble-business-api.artwork :as artwork]))

(defapi app
  (GET "/hello" []
   (log/info "Function begins from here"
    :return [artwork/artwork]
    :summary "Returns list of artworks"
    (response/response (logic/artworks)))))

代码输出为:

:return [{:id java.lang.Integer, #schema.core.OptionalKey{:k :name} java.lang.String}]
:summary Returns list of artworks
{:status 200, :headers {}, :body [{"id":25,"name":"Garden"},{"id":27,"name":"Lord Of the Rings Statue"},{"id":32,"name":"DEFAULT"},{"id":33,"name":"Garden"},{"id":39,"name":"garden"},{"id":83,"name":"yyeye"},{"id":86,"name":"DEFAULT"},{"id":88,"name":"wera"},{"id":137,"name":""},{"id":149,"name":"DEFAULT"}]}

如何将:body 的响应显示为 JSON 格式。

我需要这样显示数据

 [
  {
    "id": 25,
    "name": "Garden"
  },
  {
    "id": 27,
    "name": "Lord Of the Rings Statue"
  },
  {
    "id": 32,
    "name": "DEFAULT"
  },
  {
    "id": 33,
    "name": "Garden"
  },
  {
    "id": 39,
    "name": "garden"
  },
  {
    "id": 83,
    "name": "yyeye"
  },
  {
    "id": 86,
    "name": "DEFAULT"
  },
  {
    "id": 88,
    "name": "wera"
  },
  {
    "id": 137,
    "name": ""
  },
  {
    "id": 149,
    "name": "DEFAULT"
  }
]

【问题讨论】:

  • 我弄错了。我错误地在日志中写了(log/info "Function begins from here" :return [artwork/artwork] :summary "Returns list of artworks" (response/response (logic/artworks)))))

标签: clojure compojure compojure-api


【解决方案1】:

我得到了答案并找出了我做错的地方。

(ns clojure-dauble-business-api.core
  (:require [compojure.api.sweet :refer :all])
  (:require [ring.util.http-response :refer :all])
  (:require [clojure-dauble-business-api.dbdev :as dbdev])
  (:require [yesql.core :refer [defquery]])
  (:require [cheshire.core :as json])
  (:require [ring.util.response :as response])
  (:require [clojure-dauble-business-api.logic :as logic])
  (:require [clojure.tools.logging :as log])
  (:require [clojure-dauble-business-api.artwork :as artwork]))

(defapi app
  (GET "/hello" []
   (log/info "Function begins from here"
    :return [artwork/artwork]
    :summary "Returns list of artworks"
    (response/response (logic/artworks)))))

应该是

(ns clojure-dauble-business-api.core
  (:require [compojure.api.sweet :refer :all])
  (:require [ring.util.http-response :refer :all])
  (:require [clojure-dauble-business-api.dbdev :as dbdev])
  (:require [yesql.core :refer [defquery]])
  (:require [cheshire.core :as json])
  (:require [ring.util.response :as response])
  (:require [clojure-dauble-business-api.logic :as logic])
  (:require [clojure.tools.logging :as log])
  (:require [clojure-dauble-business-api.artwork :as artwork]))

(defapi app
  (GET "/hello" []
    (log/info "Function begins from here")
    :return [artwork/artwork]
    :summary "Return list of artworks"
    (ok (logic/artworks))))

【讨论】:

  • 另外,请记住,每次使用库时都不需要 :require。它可以简单地是 (:require [library1 :refer all][library2 :refer [abc]])
猜你喜欢
  • 2020-11-09
  • 1970-01-01
  • 2014-09-11
  • 1970-01-01
  • 2019-01-01
  • 2019-01-04
  • 1970-01-01
  • 2022-01-15
  • 1970-01-01
相关资源
最近更新 更多