2

Web サービスに Rook フレームワークを使用しています。API 応答をきれいに印刷したいと考えています。レスポンスのエンコーディングはすべてwrap-restful-formatfrom の関数で処理されているようring.middleware.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))

これは正常にコンパイルされますが、応答をきれいに出力することはできません。カスタム エンコーダーが呼び出されないようです。

  • ルーク 1.3.9
  • リングミドルウェアフォーマット 0.6.0
  • cheshire 5.4.0 (json/generate-string上記の場合)
4

1 に答える 1

2

format/wrap-restful-format を次のように変更してみてください。

(ring.middleware.format/wrap-restful-format :formats (concat (make-encoders-seq) [:edn])
于 2016-01-27T13:07:46.727 に答える