如何解决Clojure Muuntaja中间件无法获取body-params值的问题
问题原因与解决方法
问题原因
- Reitit路由配置错误:你将muuntaja的配置项放在了路由条目数组中,导致格式解析中间件未被正确加载,无法解析JSON请求体,最终
:body-params始终为null。 - 可能缺少请求头:发送POST请求时如果未携带
Content-Type: application/json,muuntaja也不会自动解析JSON格式的请求体。
解决方法
修正路由配置
将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]}})))确保请求携带正确头信息
发送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
相关产品推荐
相关产品推荐

