2017-07-11 61 views
1

我是compojure api的新手。Compojure Rest API:以JSON格式显示body响应

如何以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" 
    } 
] 
+0

我得到了我的错误。我错误地在日志里面写了''(log/info“函数从这里开始” :return [艺术作品/艺术作品] :summary“艺术品返回列表” (response/response(logic/artwork)))))'' ' – Srini

回答

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)))) 
+0

另外,请记住,您不需要:每次使用库时都需要。它可以简单地为(:require [library1:全部引用] [library2:refer [abc]]) – Slae