使用以下应用程序:
; 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端点会出现以下错误:
com.fasterxml.Jackson.core.JsonGenerationException:无法对class的object进行JSON编码:class org.joda.time.DateTime:2017-10- 21 T03:38:16.207Z
有没有一种简单的方法可以让ring-json对DateTime对象进行编码?我是否必须先编写自己的中间件来将其转换为字符串?如果是这样,我该怎么做?(我以前从未编写过环中间件)。
我的项目.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条答案
按热度按时间ryhaxcpt1#
如果你使用柴郡来生成JSON,你可以扩展它的协议来处理序列化,那么它应该“正常工作”:
字符串
mv1qrgav2#
此外,以下修改使其适用于使用时间库tick.alpha.api的项目。
字符串
在文件
db/core.clj
中实现以下内容为我解决了这个问题。型
ymzxtsji3#
另一种方法做同样的事情泰勒伍兹回答:
字符串