【问题标题】:How can I make JSON responses be pretty-printed when using Rook?使用 Rook 时如何使 JSON 响应打印得更漂亮?
【发布时间】:2016-05-03 10:55:00
【问题描述】:

我正在为 Web 服务使用 Rook 框架。我想让 API 响应打印得很漂亮。似乎响应编码都由来自ring.middleware.formatwrap-restful-format 函数处理。所以我尝试用我自己的版本替换rook/wrap-with-standard-middleware 函数,该版本将不同的选项传递给ring.middleware.format

(defn make-encoders-seq []
  [(ring.middleware.format-response/make-encoder
    (fn [s]
      (json/generate-string s {:pretty true}))
    "application/json")])

(defn wrap-with-standard-middleware-modified
  [handler]
  (-> handler
  (ring.middleware.format/wrap-restful-format :formats [:json-kw :edn]
                          :response-options
                          [:encoders (make-encoders-seq)])
  ring.middleware.keyword-params/wrap-keyword-params
  ring.middleware.params/wrap-params))

(def handler (-> (rook/namespace-handler
        ["resource" 'my-app.resource])
         (rook/wrap-with-injection :data-store venues)
         wrap-with-standard-middleware-modified))

这编译得很好,但它不能很好地打印响应,似乎自定义编码器从未被调用过。

  • Rook 1.3.9
  • 环形中间件格式 0.6.0
  • cheshire 5.4.0(以上为json/generate-string

【问题讨论】:

    标签: clojure r-rook-package


    【解决方案1】:

    尝试将您的格式/wrap-restful-format 更改为:

    (ring.middleware.format/wrap-restful-format :formats (concat (make-encoders-seq) [:edn])
    

    【讨论】:

    猜你喜欢
    • 2013-10-03
    • 2011-08-05
    • 2015-07-03
    相关资源
    最近更新 更多