首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ring wrap- json -body不是将json数据转换为关键字映射,而是将其转换为字符串映射

Ring wrap- json -body不是将json数据转换为关键字映射,而是将其转换为字符串映射
EN

Stack Overflow用户
提问于 2021-05-02 16:22:36
回答 1查看 124关注 0票数 2

在几年前对10+略微涉猎之后,我又回到了clojure,所以我在这里可能做了一些愚蠢的事情。

我正在尝试用compojurering服务器编写一个简单的API,现在我已经将我的问题隔离到了几行代码中。我有一个路由和一个处理程序,并且像ring-json文档中的suggested一样,我用wrap-json-body包装了我的处理程序。

我的handler.clj是这样的:

代码语言:javascript
复制
(defroutes app-routes 
  (PUT "/item/:id" {{id :id} :params body :body} (str id ", " body))
  (route/not-found "Not Found"))

(def app
  (-> app-routes
      (middleware/wrap-json-body)
      (middleware/wrap-json-response)))

这应该足够简单,并且我能够将clojure数据作为json OK返回。问题是当我试图读取PUT请求主体json时。

代码语言:javascript
复制
$ curl -XPUT -H "Content-type: application/json" -d '{ "id": 32, "name": "pad" }' 'localhost:3001/item/5'
5, {"id" 32, "name" "pad"}

我希望用{:id 32 :name "pad"}填充body

下面是整个请求对象:

代码语言:javascript
复制
; (PUT "/item/:id" body (str id body))
$ curl -XPUT -H "Content-type: application/json" -d '{ "id": 32, "name": "pad" }'

{:ssl-client-cert nil, :protocol "HTTP/1.1", :remote-addr "0:0:0:0:0:0:0:1", :params {:id "5"}, :route-params {:id "5"}, :headers {"user-agent" "curl/7.58.0", "host" "localhost:3001", "accept" "*/*", "content-length" "27", "content-type" "application/json"}, :server-port 3001, :content-length 27, :compojure/route [:put "/item/:id"], :content-type "application/json", :character-encoding "UTF-8", :uri "/item/5", :server-name "localhost", :query-string nil, :body {"id" 32, "name" "pad"}, :scheme :http, :request-method :put}

我对它进行了一些调整和更改,但似乎不能让:body填充以关键字为基础的clojure数据。

请问我做错了什么?

ps:如果你想看这个问题的工作示例,我已经将它上传到github

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-02 16:46:27

wrap-json-body中使用keywords?参数

代码语言:javascript
复制
(middleware/wrap-json-body app-routes {:keywords? true})

或者,从ring-clojure版本0.5.1开始,您可以指定一个自定义key-fn来转换映射的键:

代码语言:javascript
复制
(middleware/wrap-json-body app-routes {:key-fn keyword})
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67354301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档