从对 Pedestal 的 POST 请求获取 POST 正文数据

Getting the POST body data from a POST request to Pedestal

我已将数据发布到基座端点“/my-post。我已按如下方式路由该端点:

[[["/" {:get landing} ^:interceptors [(body-params/body-params) ...]
  ["/my-post {:post mypost-handler}
  ....

所以在我看来,这意味着 body-params 拦截器也会为 /my-post 触发。

在我的post-处理程序中我有:

(defn mypost-handler
   [request]
   ****HOW TO ACCESS THEN FORM DATA HERE ****
)      

我现在如何访问此处的表单数据?从打印请求中我可以看出我有一个#object[org.eclipse.jetty.sever.HttpInputOverHTTP..] 显然需要进一步处理才能对我有用。

(我必须说,Pedestal 的文档充其量只是粗略的...)

mypost-handler 充当 Ring 处理程序,即。 e.它应该接受一个 Ring 请求映射和 return 一个 Ring 响应映射。因此,您可以期待一个典型的 Ring 请求结构:

(defn mypost-handler
  [{:keys [headers params json-params path-params] :as request}]
  ;; handle request
  {:status 200
   :body "ok"})

Here's more relevant info 关于在路由表中定义此类处理程序。

像这样的东西应该有用。注意 mypost-handler 路由上的 body-params 拦截器

(defn mypost-handler
  [{:keys [headers params json-params path-params] :as request}]
  ;; json-params is the posted json, so
  ;; (:name json-params) will be the value (i.e. John) of name property of the posted json {"name": "John"}
  ;; handle request 
  {:status 200
   :body "ok"})

(defroutes routes
  [[["/mypost-handler" {:post mypost-handler}
     ^:interceptors [(body-params/body-params)]
     ]
    ]])