首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >没有得到请求体

没有得到请求体
EN

Stack Overflow用户
提问于 2016-02-19 02:41:59
回答 2查看 2.8K关注 0票数 2

我有一个应用程序,使用Compojure和这种端点。

代码语言:javascript
复制
(defroutes routes
  (POST "/api/v1/echo" req (str req))

(def http-handler
  (reload/wrap-reload (wrap-defaults #'routes api-defaults)))

(defn run-web-server []
    (run-jetty http-handler {:port 10555 :join? false}))

当我尝试这个卷曲请求时

代码语言:javascript
复制
curl -X POST -H "Content-Type: application/json" http://localhost:10555/api/v1/echo -d '{"hello": "world"}'

我得到了这个回应

代码语言:javascript
复制
{:ssl-client-cert nil, :remote-addr "0:0:0:0:0:0:0:1", :params {}, :route-params {}, :headers {"accept" "*/*", "user-agent" "curl/7.43.0", "content-type" "application/json", "content-length" "18", "host" "localhost:10555"}, :server-port 10555, :content-length 18, :form-params {}, :query-params {}, :content-type "application/json", :character-encoding nil, :uri "/api/v1/echo", :server-name "localhost", :query-string nil, :body #object[org.eclipse.jetty.server.HttpInput 0x4317e5fa "org.eclipse.jetty.server.HttpInput@4317e5fa"], :scheme :http, :request-method :post}%

我期待看到的是{"hello", "world"}在这个响应中的某个位置,但它不在那里。我看到有:body HttpInput,但是当我尝试(prn (-> req :body .read))时,它输出123。因为(= "{\"hello\", \"world\"}" 123) => false,我有点不知道下一步该做什么。

curl -X POST -H "Content-Type: application/x-www-form-urlencoded" http://localhost:10555/api/v1/echo -d "foo=1&bar=2"确实按预期工作,并返回:params {:foo "1", :bar "2"},但我宁愿提交json。我知道我可能会使用compojure-api,但我很好奇为什么这样做。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-19 05:21:28

您需要使用环臣中间件,特别是wrap-json-body来解析json参数:

wrap body中间件将任何具有JSON内容类型的请求的主体解析为Clojure数据结构,并将其分配给:body键。 这是处理JSON请求的首选方法。

票数 6
EN

Stack Overflow用户

发布于 2016-02-19 10:40:02

尝试在处理程序中添加包-json-params中间件。

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

https://stackoverflow.com/questions/35496376

复制
相关文章

相似问题

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