首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Clojure Noir Json Put

Clojure Noir Json Put
EN

Stack Overflow用户
提问于 2012-01-09 01:32:27
回答 3查看 1.3K关注 0票数 5

我正在学习教程Mark McGranaghan REST Tutorial,但是我尝试使用Noir来完成它。

我可以添加新的条目,但是它从不占用PUT命令的主体。

我认为我试图构造put语句的问题。我认为{:keys id attrs}是问题所在,因为我试图告诉它json内容在url中,如果不在,则在正文中。有人能建议我如何使用noir defpage从正文中检索它吗?

(put在一个单独的elem文件中)

代码语言:javascript
复制
(defn put [id attrs]
  (let [new-attrs (merge (get id) attrs)]
  (swap! elems assoc id new-attrs)
  new-attrs))

(defpage [:put "/elems/:id"] {:keys [id attrs]}
  (json-response (elem/put id attrs)))
EN

回答 3

Stack Overflow用户

发布于 2012-04-29 10:33:24

如果你在post中传递"attrs=somevalue“,那么这将会起作用,但如果你试图捕获所有的键值对,这对我在1.3.0-beta1中是有效的:

代码语言:javascript
复制
(defpage [:put "/elems/:id"] attrs 
  (response/json {:attrs attrs}))

然后:

代码语言:javascript
复制
$ curl -H "Accept: application/json" -X PUT -d "foo=bar" http://localhost:8080/elems/123
=> {"attrs":{"id":"123","foo":"bar"}}
票数 2
EN

Stack Overflow用户

发布于 2012-05-17 11:34:03

here中使用Chris Granger的JSON-parsing中间件函数,并按照描述的here使用它来接收JSON数据。

在您的情况下,它将看起来像

代码语言:javascript
复制
(defpage [:put "/elems/:id"] {{:keys [attr1 attr2 attr3]} :backbone }
         "OK")

但您只需首先添加"backbone“(我个人将其重命名为"json-params")中间件。

票数 1
EN

Stack Overflow用户

发布于 2012-04-29 03:41:50

所以这些都是表单参数?如果是这样的话,像你在这里做的那样解构参数应该可以很好地工作。您可以使用noir.request在defpage中获取整个请求。我会看看这个,看看里面有什么。它应该会让事情变得清晰起来。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8779634

复制
相关文章

相似问题

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