2017-10-21 2 views
4

ジョダのDateTimeをエンコード:Clojureのリング-JSONで、次のアプリで

com.fasterxml.jackson.core.JsonGenerationException:できませんJSONエンコード

; src/webapp/core.clj 
(ns webapp.core 
    (:require [compojure.core :refer [defroutes GET]] 
      [ring.middleware.json :as mid-json] 
      [clj-time.jdbc])) 

(defn foo [request] 
    {:body {:now (org.joda.time.DateTime/now)}}) 

(defroutes routes 
    (GET "/foo" [] foo)) 

(def app 
    (-> routes 
     (mid-json/wrap-json-response))) 

/fooのエンドポイントを押すと、私は、このエラーが発生しますクラスのオブジェクト:クラスorg.joda.time.DateTime:2017-10-21T03:38:16.207Z

DateTimeオブジェクトをエンコードするためにring-jsonを取得する簡単な方法はありますか?私自身のミドルウェアを書かなければならないのですか?最初に文字列?もしそうなら、どうすればいいのですか? (私は以前にリングミドルウェアを書いたことはない)。

マイproject.cljがFYIこれらの依存関係があります。

[[org.clojure/clojure "1.8.0"] 
[org.clojure/java.jdbc "0.6.1"] 
[ring/ring-jetty-adapter "1.4.0"] 
[compojure "1.4.0"] 
[ring/ring-json "0.4.0"] 
[clj-time "0.14.0"]] 

答えて

3

あなたはJSONを生成するために、チェシャーを使用している場合、あなたはそれは「ただ働き」必要がありますシリアライズを処理するためのプロトコルを拡張することができます

(extend-protocol cheshire.generate/JSONable 
    org.joda.time.DateTime 
    (to-json [dt gen] 
    (cheshire.generate/write-string gen (str dt))))