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

Phoenix框架Plug控制器函数子句匹配失败问题求助

问题根源

你遇到的Phoenix.ActionClauseError是因为GET请求的请求体不会被Phoenix解析。你在请求里发了JSON格式的id,但Phoenix默认只会解析GET请求的URL查询参数,不会处理请求体内容,所以控制器函数get_founds/2的第二个参数里根本没有"id"键,自然匹配不到你定义的%{"id" => id}模式。

解决方案

有两种可行的修复方式,按需选择:

方式1:改用POST请求传递JSON参数

既然要传JSON格式的参数,更符合HTTP规范的做法是用POST请求:

  • 修改路由,把get "/get_founds", UserAtmController, :get_founds改为post "/get_founds", UserAtmController, :get_founds
  • 请求时使用POST /api/get_founds,保留原有的JSON请求体即可,Phoenix会自动解析请求体中的参数,控制器函数就能匹配到%{"id" => id}了。

方式2:将id作为URL查询参数传递

如果必须使用GET请求,把id放到URL的查询参数里:

  • 保持路由的get配置不变
  • 请求地址改为GET /api/get_founds?id=2,无需发送JSON请求体
  • 控制器函数无需修改,Phoenix会将查询参数解析到params中,%{"id" => id}能正常匹配。
补充说明

HTTP规范建议GET请求不要携带请求体,大部分服务器和框架(包括Phoenix)对GET请求的请求体处理都有特殊限制,遵循规范设计接口能避免这类问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 04:40:36