You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决Clojure Muuntaja中间件无法获取body-params值的问题

问题原因与解决方法

问题原因

  • Reitit路由配置错误:你将muuntaja的配置项放在了路由条目数组中,导致格式解析中间件未被正确加载,无法解析JSON请求体,最终:body-params始终为null。
  • 可能缺少请求头:发送POST请求时如果未携带Content-Type: application/json,muuntaja也不会自动解析JSON格式的请求体。

解决方法

  1. 修正路由配置
    将muuntaja的配置作为ring/router的第二个选项参数传递,而非路由数组的一部分,修正后的代码如下:

    (def app
      (ring/ring-handler
       (ring/router
        [["/"
          ["" {:handler (fn [req] {:body "hello" :status 200})}]]
         ["/api/todo" {:post {:handler todo-items-save}
                       :get (fn [req]
                              (let [todos db/get-todos]
                                (r/response todos)))}]]
        {:data {:muuntaja m/instance :middleware [muuntaja/format-middleware]}})))
    
  2. 确保请求携带正确头信息
    发送POST请求时必须包含Content-Type: application/json请求头,示例curl命令:

    curl -X POST -H "Content-Type: application/json" -d '{"content":"only a test", "title":"second"}' http://localhost:3002/api/todo
    

内容的提问来源于stack exchange,提问作者reactor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 08:55:15